GNU/Linux >> Linux の 問題 >  >> Linux

フォーマットされた出力を印刷するためのBashprintfコマンドの使用

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
修飾子を使用してprintf出力を特定のスタイルで表示する

好みに応じて出力の外観を変更するための修飾子があります。

#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ハンドブックのメンバーになることを忘れないでください。


Linux
  1. Linuxwgetコマンドを使用するための7つの便利なトリック

  2. Bash +特別な形式で印刷するためにPrintfを使用しますか?

  3. Bash スクリプト:セッションをログに記録するための bash スクリプトからのスクリプト コマンドの使用

  1. 自動化のためのBashの使用

  2. Bashを使用して整数をバイナリファイルに書き込む方法は?

  3. ランダムを使用してbashでランダムな文字列を生成する

  1. SedでBash文字列変数への参照を使用しますか?

  2. 単一のコマンドに対してBashでエイリアスを無効にする方法は??

  3. BashスクリプトでのLinuxスリープコマンドの使用