$ printf "%s" a b
ab$ printf "%s%s" a b
ab
printf
の形式指定子を理解するのに問題があります。私が正しければ、Cプログラミング言語の文字列の場合とほとんど同じです。
書式指定子%s
が次の2つの文字列を連結するのはなぜですか?
なぜ%s
は、それを置き換える文字列が1つしかないことを意味せず、残りの文字列を無視するのですか?
%s
と%s%s
の2つの文字列の結果が同じになるのはなぜですか?
それは printf
の動作を指定する方法 :
formatオペランドは、引数を満たすために必要なだけ再利用されますオペランド。追加のb、c、またはs変換指定子は、null文字列引数が指定されたかのように評価されます。他の追加の変換指定は、引数がゼロであるかのように評価されます。 formatオペランドに変換指定が含まれておらず、argumentオペランドが存在する場合、結果は不定です。
あなたの場合、%s
形式は、すべての引数を処理するために必要な回数だけ繰り返されます。
printf "%s" a b
そして
printf "%s%s" a b
最初のケースでは、%s
が2回繰り返されるため、同じ結果が生成されます。これは、%s%s
と同等です。
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 --