Xargs

xargs:選項的順序重要嗎?

  • August 24, 2017

輸入 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

當給 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 '{}'

{}只是傳遞給 的普通參數echo,沒有進行任何替換。

$$ 1 $$與IEEE Std 1003.1, 2004 Edition/Open Group Base Specifications Issue 6相比。

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