シェルのprintfコマンド
私たちは、シェルコマンドをエコー学んだ最後の章では、この章では、我々は他の出力シェルコマンドのprintfを学びます。
printfのコマンドは、printfの()の手順でCライブラリ(ライブラリ)を模倣します。
標準的な定義なので、使用のprintfスクリプトエコーポータビリティを使用するよりも優れています。
スペースで区切っ参照テキストやパラメータを使用して、printf関数は、printfの書式文字列の外で使用することができ、あなたはまた、文字列の幅を開発し、そのように左右の位置合わせにすることができます。 デフォルトのprintfは自動的にエコーのように改行を追加しません、我々は\ nは手動で追加することができます。
printfのコマンド構文:
printf format-string [arguments...]
パラメータ説明:
- フォーマット文字列:書式制御文字列
- 引数:パラメータのリスト。
例としては、次のとおりです:
$ echo "Hello, Shell" Hello, Shell $ printf "Hello, Shell\n" Hello, Shell $
次に、私は強力なprintfのを反映するためのスクリプトを使用します。
#!/bin/bash # author:本教程 # url:www.w3big.com printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
次のようにスクリプトを実行し、出力は次のようになります。
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
%S%C%D%F形式のプレースホルダです
%-10s 10文字の幅を参照してください( - 左揃え、右揃え、ノーと言ったために)、任意の文字は、10文字にワイド文字を表示されている十分なスペースが自動的に入力された場合、それは内容以上になりますそれらのすべてを示しています。
%の-4.2fは0.2小数点以下2桁を意味し、小数点形式、を指します。
より多くの例:
#!/bin/bash # author:本教程 # url:www.w3big.com # format-string为双引号 printf "%d %s\n" 1 "abc" # 单引号与双引号效果一样 printf '%d %s\n' 1 "abc" # 没有引号也可以输出 printf %s abcdef # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用 printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替 printf "%s and %d \n"
次のようにスクリプトを実行し、出力は次のようになります。
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
printfのエスケープシーケンス
シーケンス | 説明 |
---|---|
\ A | 警告文字、通常のASCII BEL文字 |
\ B | 後退 |
\ C | パラメータで左の任意の文字、および任意のパラメータと後続の滞在中における阻害(図示せず)(のみ%のBフォーマット・インジケータ制御の下でパラメータ文字列に有効な)任意の末尾に改行文字で出力、および、書式文字列の文字は無視されます |
\ F | FF(改ページ) |
\ N | ラップ |
\ R | 入力します(キャリッジリターン) |
\ T | 水平タブ |
\ V | 垂直タブ |
\\ | リテラルのバックスラッシュ文字 |
\ DDD | 文字1-3桁の8進数を表します。 唯一のフォーマット文字列で有効 |
\ 0ddd | 文字の1-3 8進数値を表示 |
例
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "www.w3big.com \a" www.w3big.com $ #不换行