Bash
xargs - 為每個參數附加一個參數
我知道,鑑於
l="a b c"
,echo $l | xargs ls
產量
ls a b c
哪個構造產生
mycommand -f a -f b -f c
一種方法:
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
您可以將
|
分隔符替換為其他字元,該字元不會出現在a
、b
或c
.**編輯:**正如@MichaelMol 所指出的,參數列表很長,有可能會溢出可以傳遞給的參數的最大長度
mycommand
。發生這種情況時,最後一個xargs
將拆分列表並執行另一個副本mycommand
,並且存在留下未終止的-f
. 如果您擔心這種情況,可以將xargs -0
上面的最後一個替換為以下內容:... | xargs -x -0 mycommand
這不會解決問題,但是
mycommand
當參數列表太長時它會中止執行。