Xargs
xargs:選項的順序重要嗎?
輸入 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相比。