xargs - 各引数に引数を追加します。

xargs - 各引数に引数を追加します。

私は知っていますl="a b c"

echo $l | xargs ls

生産する

ls a b c

どの構造が生産されるか

mycommand -f a -f b -f c

ベストアンサー1

1つの方法は次のとおりです。

echo "a b c" | xargs printf -- '-f %s\n' | xargs mycommand

これはa、およびにスペース、改行、引用符、またはバックスラッシュが含まれていないとb仮定します。c:)

GNUを使用すると、findutil一般的なケースを処理できますが、もう少し複雑です。

echo -n "a|b|c" | tr \| \\0 | xargs -0 printf -- '-f\0%s\0' | xargs -0 mycommand

区切り文字を|、 または に表示されない他の文字に置き換えることができます。abc

編集する:〜のように@michaelmore引数リストが長いと、渡すことができる最大引数長を超える危険がありますmycommand。これが発生すると、最後の項目がxargsリストを分割し、別のコピーを実行し、mycommand一方が終了していないままになる危険があります-f。これが気になる場合は、xargs -0上記の最後の項目を次のように変更できます。

... | xargs -x -0 mycommand

これは問題を解決しませんが、mycommand引数リストが長すぎると実行が中断されます。

おすすめ記事