リスト/配列があるとしましょう:
list=(a b c)
各要素をxargsにエコーするにはどうすればよいですか?何かのようなもの:
for v in list; do echo v; done; | xargs
より冗長な方法はありますか?
printf '%s\n' "${list[@]}" | xargs
これにより、list
の各要素が独自の行に出力され、改行区切りのリストがxargs
に渡されます。
"${list[@]}"
は、list
の個別に二重引用符で囲まれた要素に展開されます。 printf
は、フォーマット文字列にプレースホルダーがあるよりも多くの引数が与えられた場合、そのフォーマット文字列を再利用します。
特に長いリストでない限り、xargs
を完全に省くことができるかもしれません
list=(a b c)
# With xargs
printf "%s\n" "${list[@]}" | xargs foo # Results in « foo a b c »
# Without xargs
foo "${list[@]}" # Also results in « foo a b c »
もちろん、これを状況に適用できるかどうかは、実際のxargs
コマンドに渡す追加のフラグ(存在する場合)によって異なります。