コマンドの最後の引数が固定されるように、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
最初(=最初の要素)でどの要素が最後の要素であるかをどうやって知ることができますか?必須要素を他の要素から分離するには、いくつかの追加ロジックが必要です。