Xargs

從標準輸入轉換的參數數量是否必須與命令中的佔位符數量相同?

  • November 23, 2018

xargsstdin 輸入流創建多個參數時(-d可以指定將 stdin 輸入流拆分為多個參數的分隔符),如何xargs在要執行的命令中重新排列它們?

xargs可以選擇-I在命令中指定用參數替換的佔位符。從xargs標準輸入流創建多個參數時,佔位符的出現次數是否必須與參數的數量相同?

例如,從標準輸入轉換的參數數量是否必須與命令中的佔位符數量相同?

$ xargs -I x -d " " ls x x x
-l -t -r

你可以自己試試這個

$ echo -n a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g g g

從手冊:

-I replace-str

用從標準輸入讀取的名稱替換初始參數中出現的 replace-str。此外,未加引號的空格不會終止輸入項;相反,分隔符是換行符。 暗示 -x 和 -L 1

-L max-

lines 每個命令行最多使用 max-lines 個非空白輸入行。尾隨空白導致輸入行在下一個輸入行邏輯上繼續。暗示-x。

所以-I暗示-L 1這意味著每次呼叫只使用一個參數。如您所見,每次出現的x都替換為參數。

還有一個效果,一開始可能會讓人吃驚:

$ echo a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g
g
g

如果沒有 option -n, echo 將在末尾輸出一個換行符。使用 option -d,將不會將換行符視為分隔符,而是將其視為參數的一部分,因此:xargs的輸出中會出現換行符。g\n``g\n g\n g\n

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