echo foo | xargs -L 1 -I '{}' echo '{}'
Run Code Online (Sandbox Code Playgroud)
foo
Run Code Online (Sandbox Code Playgroud)
echo foo | xargs -I '{}' -L 1 echo '{}'
Run Code Online (Sandbox Code Playgroud)
{} foo
Run Code Online (Sandbox Code Playgroud)
为什么更改 xargs 的选项顺序会更改输出?
版本: xargs (GNU findutils) 4.6.0
当提供给 xargs 的选项发生冲突时,顺序可能很重要。
IEEE Std 1003.1-2008, 2016 Edition/Open Group Base Specifications Issue 7在xargs 的规范中添加了以下文本1:
该-I,-L和-n选项是相互排斥的。如果命令行上给出了多个,则某些实现使用指定的最后一个;其他实现以不同的方式处理选项的组合。
这编纂了 xargs 的许多实现的行为,回到 PWB/Unix 中的原始版本,其手册页说
当存在标志冲突(例如,-l与-n)时,最后一个标志具有优先权。
在 xargs 的 GNU 版本中,-L
禁用任何先前的-I
选项。所以在你的第二个例子中,
echo foo | xargs -I '{}' -L 1 echo '{}'
Run Code Online (Sandbox Code Playgroud)
{}
只是传递给 的普通参数echo
,没有进行任何替换。
[1]与IEEE Std 1003.1, 2004 Edition/Open Group Base Specifications Issue 6 相比。
归档时间: |
|
查看次数: |
355 次 |
最近记录: |