bash特殊パラメータ$ @はprintfのループと見なされますか?

bash特殊パラメータ$ @はprintfのループと見なされますか?

だから私は以下をテストしています。

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" $@

ベストアンサー1

printfここで何が起こるのかは、位置形式パラメータ(およびその他の項目)よりも多くの引数を渡すと%s形式が繰り返されることです。\nフォーマット文字列にあるように、複数行にわたって繰り返されます。この場合は特別なものはありません$@

たとえば、

$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz

$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz

おすすめ記事