명령줄에서 환경 변수가 설정되었는지 확인하세요.

명령줄에서 환경 변수가 설정되었는지 확인하세요.

명령줄에서 특정 환경 변수가 설정되어 있는지 궁금합니다. 빈 문자열(또는 그냥 공백)로 설정되는 것과 전혀 설정되지 않는 것을 구별해야 하므로 설정되지 않은 경우 아무것도 인쇄하지 않고 명시적인 true/false 또는 예/아니요를 얻고 싶습니다.

스크립트에서 를 사용할 수 있다는 것을 알고 있지만 -z명령줄에서 직접 이 작업을 수행할 수 있는지 여부와 방법은 확실하지 않습니다.

나는 이것을 시도했습니다 :

$ echo -z "${MY_URDSFDFS}"

그러나 그것은 단지 다음과 같이 인쇄됩니다:

-z

답변1

다음 양식을 사용하십시오.${VAR+TEXT}매개변수 확장. 설정하지 않으면 비어 있고 ${VAR+1}, 설정되어 있으면 비어 있어도 마찬가지입니다. (설정되지 않은 경우 비어 있거나 비어 있으며, 설정된 경우 null이 아닌 값입니다.)VAR1VAR${VAR:+1}VAR1VAR

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$varzshshksh

변수가 설정되어 있고 환경에 있는지 테스트하려면 다음을 수행할 수 있습니다.

if [[ -$parameters[var]- = *-export-* ]]; then
  echo var is set and exported to the environment
fi

(또는 ${(t)var}대신 $parameters[var]).

당신은 또한 볼 수 있습니다"'if' 문에 변수가 존재하는지 어떻게 확인하나요?"에 대한 답변입니다.해당 문제에 대한 추가 고려를 위해.

관련 정보