私は2つのパラメータを使用してbashスクリプトを呼び出しています。これをparam_one
andと呼びますparam_two
。また、test
2行のファイルがあります。
line_one
line_two
私のスクリプトは次のとおりです
cat test | xargs -I% bash -c 'echo % $1 $2;'
私が探している結果は次のとおりです。
line_one param_one param_two
line_two param_one param_two
しかし、私はこのような言葉を聞き続けます。
line_one
line_two
xargs
スクリプトに複数のパラメータがある場合は無視されます。スクリプトをこのように変更しても印刷のみです。param_oneparam_one
cat test | xargs -I% bash -c 'printf '$1 $2';'
ただし、同じコマンドからスクリプトを呼び出すときは、%
fromとfromの3つのパラメータの両方を使用する必要があります。これを行う適切な方法の提案がありますか、それとも不適切ですか?xargs
$1
$2
xargs
xargs
答え1
存在する:
cat test | xargs -I% bash -c 'echo % $1 $2;'
$1
$2
パラメータはリテラル文字列bash -c
(インラインスクリプトなど)として渡されます。%
スクリプト内でも拡張されるため、シェルコードとして扱われます。たとえば、test
含まれている場合はコマンド;reboot;
を呼び出しますreboot
。
このインラインスクリプトにパラメータを渡さないため、空白$1
です$2
。
次のことができます。
< test xargs -I% bash -c 'echo "$1" "$2" "$3"' bash % "$1" "$2"
スクリプトの引数をインラインスクリプトに渡し、文字が含まれている$1
場合は$2
そこから拡張することもできます%
。xargs
したがって、環境を使用して次の値を渡すことができます。
< test PARAM1=$1 PARAM2=$2 xargs -I% bash -c '
echo "$1" "$PARAM1" "$PARAM2"' bash %
また、xargs
入力内容にいくつかの引用があることに注意してください。これは、各行の生のコンテンツをそのまま配信したい場合に使用するものではありません。 GNUを使用すると、xargs
次のことができます。
< test xargs -d '\n' -n 1 bash -c 'echo "$3" "$1" "$2"' bash "$1" "$2"
また、変数を引用することを忘れないでください。よりprintf
信頼できるecho
滞在だからではない変える。