この例でも、2番目のエコーをエコーアウトテストにするにはどうすればよいですか。
echo test | xargs -I {} echo {} && echo {}
コマンドで{}
を2回記述するだけです。以下は機能します:
$ echo test | xargs -I {} echo {} {}
test test
あなたの問題は、コマンドが入れ子である方法です。これを見てみましょう:
echo test | xargs -I {} echo {} && echo {}
bashは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 {}
別のオプションは、-i
フラグを使用することです。これは、-I{}
と同じです(これは、置換が{}
で行われることを意味します):
$ echo test | xargs -i echo {} {}
私にとっては小文字のみが機能します。ディレクトリに何百もの画像があり、それらのソースをリストに入れたいと思っていました。大文字の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