仅使用xargs
调用-n1
时,xargs会为每个项目执行单独的echo
命令:
$ echo 1 2 | xargs -n1
1
2
但是当-n1
使用-I
选项(将要替换的字符串传递给xargs
)时,它会将所有参数传递给单个echo
命令,忽略-n1
:
$ echo 1 2 | xargs -n1 -I% echo %
1 2
我的目标是使用不同的参数执行任意命令:
$ echo 1 2 | xargs -n1 -I% mycommand %
# What I want to achieve
mycommand 1
mycommand 2
但我对我所看到的行为感到非常困惑,所以:
xargs
似乎忽略-n1
?答案 0 :(得分:4)
来自xargs(1)
:
-I replace-str
用initial替换initial-arguments中出现的replace-str 从标准输入读取的名称。 此外,不带引号的空白也没有 终止输入项目;相反,分隔符是换行符 字符。意味着-x和-L 1。
$ echo $'1\n2' | xargs -n1 -I% echo %
1
2
$ echo $'1\n2' | xargs -n1 -I% echo '*' %
* 1
* 2