Bash

xargs - 為每個參數附加一個參數

  • March 22, 2022

我知道,鑑於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

您可以將|分隔符替換為其他字元,該字元不會出現在abc.

**編輯:**正如@MichaelMol 所指出的,參數列表很長,有可能會溢出可以傳遞給的參數的最大長度mycommand。發生這種情況時,最後一個xargs將拆分列表並執行另一個副本mycommand,並且存在留下未終止的-f. 如果您擔心這種情況,可以將xargs -0上面的最後一個替換為以下內容:

... | xargs -x -0 mycommand

這不會解決問題,但是mycommand當參數列表太長時它會中止執行。

引用自:https://unix.stackexchange.com/questions/365399