Xargs
從標準輸入轉換的參數數量是否必須與命令中的佔位符數量相同?
從
xargs
stdin 輸入流創建多個參數時(-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