だから私は以下をテストしています:
foo() {
printf "\nAll the parameters, each on a separate line:\n"
printf "param: %s\n" "$@"
}
foo The "nicely colored" Rainbow
出力は次のとおりです。
All the parameters:
param: The
param: nicely colored
param: Rainbow
したがって、IFS
が\t\n
に設定されているために正しく理解できれば、パラメーターはタブ(IFS
の最初の文字)で区切られます。
しかし、なぜそれらは別々の行に印刷されるのですか?
各パラメーターに対してprintfが実行されますか。つまりbashはこれをforループに変換しますか?
また、以下(二重引用符なし)でも同じ結果が出力されます。
printf "param: %s\n" $@
ここで起こっていることは、(%s
など)の位置フォーマットパラメータよりもprintf
多い引数を渡すと、フォーマットが繰り返されることです。また、フォーマット文字列に\n
が含まれているため、複数行で繰り返されています。この場合、$@
について特別なことは何もありません。
例えば:
$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz
$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz