Xargs

用 xargs 修復了最後一個參數

  • June 23, 2020

是否可以使用 xargs 呼叫命令以固定命令的最後一個參數?

我的嘗試:

printf '%s\n' a b c d | xargs -I{} echo {} LAST

最終做

echo a LAST  
echo b LAST  
echo c LAST  
echo d LAST  

我想讓 xargs 呼叫

echo a b c d LAST
#fit as many as you can but always finish wiht LAST

這可能嗎,最好以便攜的方式?

tl;博士; 這就是你可以便攜地做到這一點的方法,沒有-I其他破碎的花哨選項:

$ echo a b c d f g | xargs -n 2 sh -c 'echo "$@" LAST' sh
a b LAST
c d LAST
f g LAST

$ seq 1 100000 | xargs sh -c 'echo "$#" LAST' sh
23692 LAST
21841 LAST
21841 LAST
21841 LAST
10785 LAST

-I選項的問題在於它被設計破壞了,並且沒有辦法解決它:

$ echo a b c d f g | xargs -I {} -n 1 echo {} LAST
a b c d f g LAST
$ echo a b c d f g | xargs -I {} -n 2 echo {} LAST
{} LAST a b
{} LAST c d
{} LAST f g

但它們可能已被涵蓋,因為這就是標準所說的:

-I replstr ^

$$ XSI $$ $$ Option Start $$插入模式:對標準輸入中的每一行執行實用程序,將整行作為單個參數,將其插入到每次出現 replstr 的參數中。

它並沒有說明與-n-d選項的互動,所以他們可以自由地做任何他們想做的事情。

這就是它在(較舊的)FreeBSD 上的情況,不太出人意料但非標準:

fzu$ echo a b c d f g | xargs -I {} -n 2 echo {} LAST
a b LAST
c d LAST
f g LAST
fzu$ echo a b c d f g | xargs -I {} -n 1 echo {} LAST
a LAST
b LAST
c LAST
d LAST
f LAST
g LAST

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