Linux 中帶有大括號的 xargs 和沒有大括號的 xargs 有什麼不同?

Linux 中帶有大括號的 xargs 和沒有大括號的 xargs 有什麼不同?

我想知道這有什麼區別

ls | xargs rm
ls | xargs -i{} rm {}

兩者都為我工作

答案1

xargs rmrm使用所有參數作為以空格分隔的參數進行呼叫。

xargs -i{} rm {}將調用rm {}每個參數並將{}被當前參數替換。

如果你有 2 個參數a.txtb.txtxargs rm 將會呼叫此

rm a.txt b.txt

xargs -i{} rm {}會打電話

rm a.txt
rm b.txt

這是因為-i選項意味著-L 1選項,這意味著該命令每次rm只使用行。1這裡每一行只包含 1 個參數。

檢查這個IDEONE 連結以獲得更多關於它的想法。

答案2

-ioption (相當於--replace)建立一種佔位符,其中 xargs 儲存剛剛收到的輸入。在第二個指令中,佔位符是{},它的作用類似於 find-exec選項。定義後,xargs 將用整行輸入取代此佔位符。如果您不喜歡這個{}名稱,您可以定義自己的名稱:

ls | xargs  -iPLACEHOLDER echo PLACEHOLDER

在您的情況下,兩個命令都會產生相同的結果。在第二種形式中,您只是使用該-I選項明確顯示預設行為。

答案3

使用大括號,它將為rm每個檔案產生一個進程。如果沒有大括號,xargs將向每個命令傳遞盡可能多的檔案名稱rm

比較

ls | xargs echo

ls | xargs -I {} echo {}

相關內容