Latest web development tutorials

シェルの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 $                  #不换行