`printf "%s"`が次の2つの文字列を一緒に連結するのはなぜですか? [コピー]

`printf
$ printf "%s" a b
ab$ printf "%s%s" a b
ab

書式指定子の理解にはいくつかの問題がありますprintf。私の言葉が正しい場合は、基本的にCプログラミング言語の文字列と同じです。

書式指定子が%s次の2つの文字列を一緒に連結するのはなぜですか?

%s1つの文字列だけを表現して置き換え、残りの文字列は無視したらどうでしょうか?

%sunderとunder両方の文字列の結果が同じであるのはなぜですか%s%s

ベストアンサー1

それはprintf行動方法を指定します。:

これ滞在オペランドは必要に応じて再利用する必要があります。ディスカッションオペランド。追加のb、c、またはs変換指定子は、空の文字列引数が指定されているかのように評価されます。他の追加変換仕様は、ゼロ個の引数が与えられたかのように評価されます。もし滞在オペランドに変換仕様が含まれておらず、ディスカッションオペランドがありますが、結果は指定されていません。

あなたの場合は、%sすべてのパラメータを処理するのに必要な数だけフォーマットが繰り返されます。

printf "%s" a b

そして

printf "%s%s" a b

%s2回繰り返された最初のケ​​ースと同じ結果を生成します%s%s

おすすめ記事