xargs没有认识到" -n1"当与" -I%"一起使用时

时间:2018-02-15 23:19:39

标签: bash xargs

仅使用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

但我对我所看到的行为感到非常困惑,所以:

  1. 为什么xargs似乎忽略-n1
  2. 我正在尝试做什么的正确方法是什么?请注意,我不想在处理任何文件时这样做。

1 个答案:

答案 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