標準入力から変換された引数の数は、コマンドのプレースホルダの数と同じでなければなりませんか?

標準入力から変換された引数の数は、コマンドのプレースホルダの数と同じでなければなりませんか?

xargs標準入力ストリームで複数の引数が生成された場合(-d標準入力ストリームを複数の引数に分割するための区切り文字を指定できます)、xargs実行するコマンドでそれらをどのように並べ替えることができますか?

xargs-Iパラメータを置き換えるためにコマンドにプレースホルダを指定するオプションがあります。 stdin入力ストリームから複数のパラメータを生成するときは、プレースホルダをパラメータxargsと同じ回数で表示する必要がありますか?

たとえば、標準入力から変換された引数の数は、コマンドのプレースホルダーの数と同じでなければなりませんか?

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

ベストアンサー1

自分で試してみてください。

$ 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 置換-str
初期引数の置換-str 発生を標準入力から読み取った名前に置き換えます。また、引用符のないスペースは項目を終了せず、代わりに区切り文字は改行文字です。 -x と -L 1 を意味します。

-L max-linesコマンドライン
ごとの最大max-linesスペース以外の入力行を使用します。末尾の空白のため、入力行は論理的に次の入力行に続きます。 -x を意味します。

つまり-I-L 1呼び出しごとに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

options がない場合、-necho は末尾に改行文字を出力します。 optionを使用すると、-d改行xargsは区切り文字として扱われず、引数の一部として処理されるため、次のようになります。の出力に改行が表示されg\nますg\n g\n g\n

おすすめ記事