$ printf "%s" a b
ab$ printf "%s%s" a b
ab
書式指定子の理解にはいくつかの問題がありますprintf
。私の言葉が正しい場合は、基本的にCプログラミング言語の文字列と同じです。
書式指定子が%s
次の2つの文字列を一緒に連結するのはなぜですか?
%s
1つの文字列だけを表現して置き換え、残りの文字列は無視したらどうでしょうか?
%s
underとunder両方の文字列の結果が同じであるのはなぜですか%s%s
?
答え1
これ滞在オペランドは必要に応じて再利用する必要があります。ディスカッションオペランド。追加のb、c、またはs変換指定子は、空の文字列引数が指定されているかのように評価されます。他の追加変換仕様は、ゼロ個の引数が与えられたかのように評価されます。もし滞在オペランドに変換仕様が含まれておらず、ディスカッションオペランドがありますが、結果は指定されていません。
あなたの場合は、%s
すべてのパラメータを処理するのに必要な数だけフォーマットが繰り返されます。
printf "%s" a b
そして
printf "%s%s" a b
%s
2回繰り返された最初のケースと同じ結果を生成します%s%s
。
答え2
書式文字列が予想よりも多くの引数を指定すると、printf
書式文字列が繰り返されます。
例えば
$ printf "%s -- %s" a b c d e
a -- bc -- de --
%s -- %s
フォーマットが効果的に繰り返されることがわかります。
たとえば、書式設定に役立ちます。
$ printf "%s -- %s\n" a b c d e
a -- b
c -- d
e --