私はこれを持っています:
r_flag=' -r ';
docker ps -aq | xargs "$r_flag" docker rm -v | cat;
Ubuntuで次のエラーが発生します。
xargs: -r : No such file or directory
なぜそんなことですか? -rオプションをxargsに渡したいと思います。私がそれを次のように変更した場合:
r_flag=' -r ';
到着
r_flag='-r';
絶え間ない…!しかし、なぜ。
答え1
r_flag=" -r "
変数の値にスペースが含まれています。つまり、パラメータは"$r_flag"
axargs
で始まらないため、-
オプションとは見なされません。オプションの最初の文字持つダッシュになります。
オプションではないため、xargs
実行する必要があるユーティリティの名前として解釈されます。ユーティリティが見つからず、文句を言います。
正しいことを行う他の方法:
set -- -r
docker ps -aq | xargs "$@" docker rm -v
またはで配列を使用してくださいbash
。
xargs_opts=( -r )
docker ps -aq | xargs "${xargs_opts[@]}" docker rm -v
xargs
これにより、新しい変数を定義せずに追加のフラグを簡単に渡すことができます。
set -- -r -t
docker ps -aq | xargs "$@" docker rm -v
またはで配列を使用してくださいbash
。
xargs_opts=( -r -t )
docker ps -aq | xargs "${xargs_opts[@]}" docker rm -v
コマンドに渡される配列は、明らかに動的に構成できます。
xargs_opts=()
if should_trace; then
xargs_opts+=( -t )
fi
if should_not_run_on_empty; then
xargs_opts+=( -r )
fi