
我有這個:
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"
toxargs
不以 a 開頭-
,因此不被視為選項。選項的第一個字符有成為破折號。
由於它不是一個選項,因此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