명령줄에서 특정 환경 변수가 설정되어 있는지 궁금합니다. 빈 문자열(또는 그냥 공백)로 설정되는 것과 전혀 설정되지 않는 것을 구별해야 하므로 설정되지 않은 경우 아무것도 인쇄하지 않고 명시적인 true/false 또는 예/아니요를 얻고 싶습니다.
스크립트에서 를 사용할 수 있다는 것을 알고 있지만 -z
명령줄에서 직접 이 작업을 수행할 수 있는지 여부와 방법은 확실하지 않습니다.
나는 이것을 시도했습니다 :
$ echo -z "${MY_URDSFDFS}"
그러나 그것은 단지 다음과 같이 인쇄됩니다:
-z
답변1
다음 양식을 사용하십시오.${VAR+TEXT}
매개변수 확장. 설정하지 않으면 비어 있고 ${VAR+1}
, 설정되어 있으면 비어 있어도 마찬가지입니다. (설정되지 않은 경우 비어 있거나 비어 있으며, 설정된 경우 null이 아닌 값입니다.)VAR
1
VAR
${VAR:+1}
VAR
1
VAR
if [ -n "${MY_URDSFDFS+1}" ]; then
echo "\$MY_URDSFDFS is set"
else
echo "\$MY_URDSFDFS is not set"
fi
이는 모든 POSIX 또는 Bourne 쉘, 즉 모든 최신 및 심지어 가장 오래된 sh 방언에 적용됩니다.
이는 환경 변수와 쉘 변수를 구별하지 않습니다. 내보내지 않은 셸 변수를 거부해야 하는 경우 별도의 프로세스에서 이를 테스트할 수 있습니다 sh -c 'test -n "${MY_URDSFDFS+1}"'
. 그러나 이것이 문제가 되는 경우는 거의 없습니다.
때로는 변수를 설정 해제하는 것이 불편하고 때로는 변수를 빈 문자열로 설정하는 것이 불편하기 때문에 이는 일반적으로 나쁜 생각입니다. 일반적으로 빈 환경 변수는 설정되지 않은 환경 변수와 동일하게 처리되어야 합니다.
답변2
셸 에서 zsh
변수가 설정되었는지 여부를 테스트하기 위해 표준 외에도 설정하면 1로 확장되고 그렇지 않으면 0으로 확장되는 곳을 [ -n "${var+set}" ]
사용할 수 있습니다 .(( $+var ))
$+var
$var
이전에 설정되지 않은 동안을 zsh
수행하면 실행 또는 시뮬레이션(이러한 변수를 내보내는 것은 의미가 없음)을 제외하고 값이 자동으로 할당됩니다(숫자 변수의 경우 0, 배열/해시 변수의 빈 목록) . 그렇지 않은 경우 나열), 이러한 테스트는 true를 반환합니다.export var
$var
zsh
sh
ksh
변수가 설정되어 있고 환경에 있는지 테스트하려면 다음을 수행할 수 있습니다.
if [[ -$parameters[var]- = *-export-* ]]; then
echo var is set and exported to the environment
fi
(또는 ${(t)var}
대신 $parameters[var]
).
당신은 또한 볼 수 있습니다"'if' 문에 변수가 존재하는지 어떻게 확인하나요?"에 대한 답변입니다.해당 문제에 대한 추가 고려를 위해.