xargsで変数を2回繰り返す方法

xargsで変数を2回繰り返す方法

この例では、2番目のエコーテストをどのように実行できますか?

 echo test  | xargs -I {} echo {} && echo {}

答え1

{}コマンドに2回だけ書き込みます。以下が機能します。

$ echo test | xargs -I {} echo {} {}
test test

問題はコマンド方式です入れ子になった。これを見てみましょう:

echo test | xargs -I {} echo {} && echo {}

強く打つ実行されますecho test | xargs -I {} echo {}。実行が成功するとecho {}実行されます。ネストを変更するには、次のようにします。

echo test | xargs -I {} sh -c "echo {} && echo {}"

ただし、この方法ではコードの挿入が発生しやすく、問題が発生する可能性があります。 「test」がシェルコードに置き換えられると実行されます。したがって、入れ子になったシェルに入力を渡すには引数を使用する必要があります。

echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}

答え2

-iもう1つのオプションは、次のようなフラグを使用することです-I{}(代替はとして提供されることを意味します{})。

$ echo test | xargs -i echo {} {}

答え3

私にとっては小文字だけが機能します。ディレクトリに何百もの画像があり、そのソースをリストに追加したいと思います。大文字のi-Iオプションは機能しません。小文字のみ可能です。おそらくバージョンの違いによるものです。画像はすべて同じ名前を持っていますDaniel_(somenumber).jpg

この構文はすでに機能しています。

ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"

返品:

src='Daniel_248.jpg' alt='Daniel_248.jpg'
...

Linux バージョン 4.14.96-hw+ #80 SMP x86_64 GNU/Linux

関連情報