xargsを使用して最後のパラメータを修正しました。

xargsを使用して最後のパラメータを修正しました。

コマンドの最後の引数が固定されるように、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

可能な限り携帯可能な方法で可能ですか?

答え1

長すぎる博士。-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] [オプションの開始] 挿入モード: ユーティリティの実行標準入力の各行について行全体を単一引数として使用、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

答え2

(一人で)ではありませんxargs。長さを予測できない項目のリストがある場合、xargs最初(=最初の要素)でどの要素が最後の要素であるかをどうやって知ることができますか?必須要素を他の要素から分離するには、いくつかの追加ロジックが必要です。

関連情報