쉘 스크립트: 환경 변수가 정의된 경우에만 env 변수 앞에 접두사를 붙이는 방법은 무엇입니까?

쉘 스크립트: 환경 변수가 정의된 경우에만 env 변수 앞에 접두사를 붙이는 방법은 무엇입니까?

command이를 위해서는 플래그가 필요하다고 가정합니다 --flag. 해당 값이 환경 변수로 제공되는 경우에만 이 플래그를 삽입하려고 합니다 VALUE.

나는 다음을 시도했다:

echo "command ${X+--flag ${VALUE}}"
VALUE=1
echo "command ${X+--flag ${VALUE}}"'

인용하다:

답변1

command ${VALUE:+--flag "$VALUE"}

변수가 정의되고 null이 아닌 경우 command옵션 --flag과 해당 옵션 인수를 사용하여 실행됩니다. 변수가 비어 있거나 정의되지 않은 경우 인수 없이 실행됩니다."$VALUE"VALUEcommand

zsh셸 에서는 따옴표가 없는 확장 시 토큰화가 수행되지 않으므로 SH_WORD_SPLIT셸 옵션( )을 설정하거나 호환 모드( )에서 셸을 실행하거나 setopt SH_WORD_SPLIT다음을 사용해야 합니다.shzsh --emulate sh

command ${=VALUE:+--flag "$VALUE"}

...null이 아닌 값으로 설정되고 두 개의 별도 인수로 전달되는 것을 보장 --flag합니다 "$VALUE".VALUE

정의되었지만 비어 있는 옵션을 추가하려면 :매개변수 대체를 제거하십시오.--flagVALUE

관련 정보