나는 이것을 가지고있다:
r_flag=' -r ';
docker ps -aq | xargs "$r_flag" docker rm -v | cat;
우분투에서 다음 오류가 발생합니다.
xargs: -r : No such file or directory
왜 그런 겁니까? -r 옵션을 xargs에 전달하고 싶습니다. 내가 그것을 다음과 같이 바꾸면 :
r_flag=' -r ';
도착하다
r_flag='-r';
절뚝거리는...! 그런데 왜.
답변1
r_flag=" -r "
변수 값에 공백이 포함되어 있습니다. 즉, 매개변수는 "$r_flag"
a xargs
로 시작하지 않으므로 -
옵션으로 간주되지 않습니다. 옵션의 첫 번째 문자가지다대시가 되십시오.
옵션이 아니기 때문에 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