Linuxコマンドラインで印刷する最も簡単な方法は、echoコマンドを使用することです。
echo "Value of var is $var"
ただし、フォーマットされた出力を印刷する必要がある場合は、echoコマンドでは不十分です。
これは、printfコマンドが役立つところです。 bash printfコマンドは、C /C++プログラミング言語のprintfコマンドと同じように動作します。
printf "My brother %s is %d years old.\n" Prakash 21
出力を推測できますか?

最初の引数%s
文字列%d
が必要です C / C ++と同様に、10進整数が必要です。 C / C ++に慣れていなくても、心配する必要はありません。
Bashスクリプトでprintfコマンドを使用するためだけにそれを学ぶ必要はありません。 Bashprintfコマンドの例をいくつか紹介します。
Bashprintfコマンドの使用
最初に構文から始めましょう。
printf format [arguments]
ここでは、format
は、後続の値がどのように表示されるかを決定する文字列です。
例では、printf "My brother %s is %d years old.\n" Prakash 21
、「私の兄弟%sは%d歳です。\ n」全体がフォーマットであり、その後に引数Prakash
が続きます。 および21
。引数は、この記事の後半で説明するフォーマット指定子(%s、%dなど)を置き換えるために使用されます。
最も単純な形式では、printfを文字列を表示するためのechoコマンドとして使用できます。
printf "Hello World\n"
改行文字\n
に注意してください 最後に? echoコマンドとprintfコマンドの違い つまり、echoは最後に改行文字を自動的に追加しますが、printfの場合は、明示的に追加する必要があります。

フォーマット文字列はすべての引数に適用されようとすることに注意してください。そのため、特に注意を払う必要があります。
[email protected]:~$ printf "Hello, %s! \n" Abhishek Prakash
Hello, Abhishek!
Hello, Prakash!

同様に、フォーマット文字列で期待されるフォーマット指定子の種類にも注意を払う必要があります。

上記の例でわかるように、目的の引数が見つからない場合は、デフォルト値が表示されます。デフォルト値は、文字列の場合はnull、整数の場合は0です。
printf "Hi %s, your room number is %d. \n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0.
Hi 131, your room number is 0.
ここでは、Abhishek Prakash
が必要です 引数と131
の最初のセットとして 引数の2番目のセットとして。
整数ではなく文字列(Prakash)が見つかると、文句を言いますが、デフォルト値0で2番目の引数を使用して出力を表示し続けます。
同様に、131を2番目の引数セットの文字列と見なし、2番目の引数がないため、デフォルトで0になります。
出力を希望の形式で表示するために使用できるいくつかの形式指定子があります。最も一般的なもののいくつかを次に示します。
キャラクター | 使用法 |
---|---|
%s | 文字列 |
%c | 単一の文字 |
%d | 整数 |
%o | 8進整数 |
%x | 16進整数 |
%f | 浮動小数点 |
%b | バックスラッシュエスケープ文字を含む文字列 |
%% | パーセント記号 |
フォーマット指定子に慣れてきたので、それらの動作を示すいくつかの例を見てみましょう。
Bashprintfコマンドの例
これらの例のほとんどは自明であるため、詳細な説明は必要ないと思います。
[email protected]:~$ printf "The octal value of %d is %o\n" 30 30
The octal value of 30 is 36
%b
の使用法を見てみましょう バックスラッシュエスケープ文字を正しく解釈するための指定子。
[email protected]:~$ printf "String with backslash: %s\n" "Hello\nWorld!"
String with backslash: Hello\nWorld!
%s
に表示されます 、違いはありません。ただし、%b
改行文字は正しく解釈されます:
[email protected]:~$ printf "String with backslash: %b\n" "Hello\nWorld!"
String with backslash: Hello
World!
%c
を使用する場合 、一度に文字のみを読み取ります。
[email protected]:~$ printf "Character: %c\n" a
Character: a
[email protected]:~$ printf "Character: %c\n" a b c
Character: a
Character: b
Character: c
[email protected]:~$ printf "Character: %c\n" abc
Character: a
好みに応じて出力の外観を変更するための修飾子があります。
#8進数と16進数の修飾子
以前、%o
の使用を見ました 10進数を8進数に変換します。しかし、それが8進数であるかどうかはあまり明確ではありませんでした。 #
を使用できます 8進数と16進数を適切な形式で表示する修飾子。
[email protected]:~$ printf "%d is %#o in octal and %#x in hexadecimal\n" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal
%
の間にスペースを使用できます およびd
%d
で 先頭にスペースがある正の整数を表示します。これは、正の数と負の数の列がある場合に役立ちます。どちらがより「きれい」に見えるかを確認してください:
[email protected]:~$ printf "%d \n%d \n%d \n" 10 -10 10
10
-10
10
[email protected]:~$ printf "% d \n%d \n% d \n" 10 -10 10
10
-10
10
幅修飾子は、引数の最小フィールド幅を指定する整数です。
デフォルトでは、右揃えになっています:
[email protected]:~$ printf "%10s| %5d\n" Age 23
Age| 23
-
を追加することで、左揃えにすることができます それにフラグを立てる:
[email protected]:~$ printf "%-10s| %-5d\n" Age 23
Age | 23
精度修飾子(。)ドットを使用して、%d
で表示される最小桁数を指定できます。 、%u
、%o
、%x
。値の左側にゼロのパディングが追加されます。
[email protected]:~$ printf "Roll Number: %.5d\n" 23
Roll Number: 00023
文字列で精度修飾子を使用する場合は、文字列の最大長を指定します。文字列が長い場合、表示で切り捨てられます。
[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi
幅と精度の両方の修飾子を組み合わせることができます:
[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi
[email protected]:~$ printf "Name: %10.4s\n" Abhishek
Name: Abhi
ボーナスの例:printfを使用して出力を表形式で表示する
printfコマンドについて学んだことを、もう少し複雑な例を使って活用してみましょう。これにより、bashスクリプトでのprintfコマンドの真の可能性が示されます。
printfコマンドを使用して、bashを使用して次のテーブルを印刷してみましょう。
名前 | ID | 年齢 | グレード |
---|---|---|---|
シャーロックホームズ | 0000122 | 23 | A |
ジェームズボンド | 000007 | 27 | F |
エルキュールポアロ | 0006811 | 59 | G |
ジェーンマープル | 1234567 | 71 | C |
これが私がこのタスクのために書いたシェルスクリプトです。スクリプトは異なる場合があります:
#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\n"
TableWidth=37
printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Grades
printf "%.${TableWidth}s\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C
このbashシェルスクリプトを実行すると、次のように出力されます。

bash printfコマンドを使用して、スクリプト用に美しくフォーマットされた出力を印刷するのは素晴らしいことではありませんか?
Linuxのprintfコマンドに関するこの詳細なチュートリアルが気に入っていただけたでしょうか。ご質問やご提案がございましたら、お知らせください。そして、このような情報を提供するLinuxの学習については、Linuxハンドブックのメンバーになることを忘れないでください。