Bash printf関数:Linuxの7つの例

Bashシェルをかなりの時間使用している場合は、echoコマンドを使用してLinuxターミナルで文字列を出力する方法をおそらくご存知でしょう。ただし、printfコマンドを使用すると、特定のフォーマットでテキストを印刷するのがはるかに簡単になります。

今日は、Bashスクリプトスキルを強化するためにprintf関数を使用する方法を学習します。

Bash printf関数とは何ですか?

名前が示すように、printfはフォーマットされたテキストの文字列を出力する関数です。つまり、文字列構造(形式)を記述し、後で値(引数)を入力することができます。

C / C ++プログラミング言語に精通している場合は、printfがどのように機能するかをすでに知っているかもしれません。 BashシェルのPrintfは非常に似ていますが、いくつかの小さな違いがあります。

詳細: C ++プログラミングを始めるのに最適なサイト

Bashシェルでprintfを使用する方法

printfの基本的な構文は次のとおりです。

 printf format [argument]

Printfは、指定された引数を使用してエスケープ )とディレクティブ )を実装している間、フォーマット文字列を出力します。次のコマンドの出力に注意してください。

 $ printf "Hello, %s" world
Hello, world

Printfはworld引数を取り、指定された文字列の%s文字をそれに置き換えました。

出力後、Bashが新しい行を作成しないことに気付くかもしれません。 echoコマンドとは異なり、printfは、出力が出力された後に新しい行が必要であるとは想定しません。したがって、各インスタンスで改行文字 nを使用する必要があります。

文字列を印刷してから新しい行に移動するには、 printf "Hello、world n"と入力します。

 Hello, world

printfは、すべての引数にフォーマットを再利用しようとすることを覚えておくことが重要です。これを有利に使用できますが、注意しないと、次のような結果になる可能性があります。

 $ printf "My name is %s " Jordan Gloor
My name is Jordan My name is Gloor

また、引数が欠落している場合、printfはすべてのディレクティブを0 (数値の場合)およびnull (文字列の場合)として解釈することにも注意してください。

 $ printf "Hello, %s."
Hello, .

Linuxでprintfを使用したBashスクリプトがどのように機能するかがわかったので、コマンドでBashスクリプトを使用する準備が整いました。

Linux Bashprintfの例

Printfは、スクリプトで使用できる多くのフォーマット指定子を備えています。ただし、今日は、この関数の一般的なもののみを取り上げます。

1.出力を文字列でフォーマットする

テキストの文字列で出力をフォーマットするには、 %sディレクティブを使用します。

 $ printf "%s is one of the largest online %s." MUO "technology publications"
MUO is one of the largest online technology publications.

2.出力文字列を小数でフォーマットします

文字列を整数でフォーマットするには、符号付き10進数に%dディレクティブを使用できます。

 $ printf "MUO was founded in %d." 2007
MUO was founded in 2007.

出力で符号なし10進数を使用する場合は、代わりに%uディレクティブを使用する必要があることに注意してください。

関連: Linuxでの「Bash」とはどういう意味ですか?

3.printfを使用して数学関数を出力します

printfコマンドを使用した数学関数のフォーマットは簡単です。 Bashで通常行うように、式を二重括弧内に配置し、引数リストで式を指定するだけです。

 $ printf "1 + 1 is %d" $((1+1))
1 + 1 is 2

4.16進数をフォーマットします

16進数をフォーマットする必要がある場合は、小文字に%xを使用し、大文字に%Xを使用します。

 $ printf %X 1000
3E8C

現在の日付と時刻を出力するには、printfをdateコマンドと組み合わせて、次のディレクティブを渡すことができます。

 $ printf "%(%m-%d-%Y %H:%M:%S)T" $(date +%s)
03-26-2021 15:27:57

前述の出力で、月、日、年、時、分、秒のフォーマット指定子を確認できます。

6.Unicode文字で文字列をフォーマットする

printfを使用してUnicode文字を印刷するには、16ビットUnicodeの場合は uエスケープを使用し、32ビットUnicodeの場合は Uを使用します。

たとえば、次のコマンドで著作権記号を印刷できます。

 $ printf "u00A9"
©

7.出力に間隔を追加します

ディレクティブ指定子の前に、印刷される最小文字数を定義することにより、文字列を間隔を空けてフォーマットできます。未使用の文字はスペースで埋められます。

たとえば、 printf "%s:%5d n" "Value 1" 25 "Value 2" 120と入力すると、次のように出力されます。

 Value 1: 25
Value 2: 120

出力の%5dフォーマット指定子は、フォーマットされた文字列に最低5文字が含まれることを示します。 25は2桁しかないため、残りの文字にスペースが追加されます。

幅として負の数を渡すと、ディレクティブは右寄せではなく左寄せになります。

 $ printf "%-10s: %d " "Circles" 25 "Boxes" 120
Circles : 25 Boxes : 120

幅を変数にしたい場合は、数値の代わりにアスタリスクを渡すことができます。printfは、引数リストで見つかった次の数値を使用します。

 $ printf "%*s: %d " -10 "Circles" 25 -10 "Boxes" 120
Circles : 25 Boxes : 120

関連: LinuxのBash ForLoopsについて知っておくべきことすべて

Linuxのprintfコマンドを学ぶ

Bashスクリプトユーティリティベルトのprintfコマンドを使用すると、端末で複雑でさまざまな文字列の印刷を開始する準備が整います。 Bashスクリプトを開発するときは、可能な限り最も生産的な環境で作業していることを確認することが重要です。これにより、コマンドラインスキルが向上するだけでなく、ワークフロー全般が強化されます。