输入0

输入0

输入0

echo foo | xargs -L 1 -I '{}' echo '{}'

输出0

foo

输入1

echo foo | xargs -I '{}' -L 1 echo '{}'

输出1

{} foo

为什么更改 xargs 选项的顺序会改变输出?

版本:xargs (GNU findutils) 4.6.0

答案1

当给 xargs 的选项发生冲突时,顺序可能很重要。

IEEE Std 1003.1-2008,2016 年版/开放组基本规范第 7 期将以下文本1添加到 xargs 规范中:

-我,-L, 和-n选项是互斥的。如果在命令行上给出了多个,则某些实现会使用最后指定的一个;其他实现以不同的方式处理选项的组合。

这编码了 xargs 的许多实现的行为,可以追溯到 PWB/Unix 中的原始版本,其手册页

当存在标志冲突时(例如,-l-n),最后一个标志优先。

在 xargs 的 GNU 版本中,-L禁用任何先前的-I选项。所以在你的第二个例子中,

echo foo | xargs -I '{}' -L 1 echo '{}'

{}只是传递给 的普通参数echo,没有进行任何替换。

[1]相比IEEE Std 1003.1,2004 年版/开放组基本规范第 6 期

相关内容