programing

환경 변수 확인

nasanasas 2020. 12. 7. 08:13
반응형

환경 변수 확인


환경 변수의 값을 확인하려고 노력하고 있으며 값에 따라 특정 작업을 수행하고 변수가 설정되어있는 한 정상적으로 작동합니다. 전체 오류가 발생하지 않을 때 (BASH가 지정한 문자열을 정의되지 않은 변수와 비교하려고 할 때)

나는 그것을 방지하기 위해 추가 검사를 시도했지만 운이 없었습니다. 내가 사용하는 코드 블록은 다음과 같습니다.

#!/bin/bash

if [ -n $TESTVAR ]
then
  if [ $TESTVAR == "x" ]
  then
    echo "foo"
    exit
  elif [ $TESTVAR == "y" ]
  then
    echo "bar"
    exit
  else
    echo "baz"
    exit
  fi
else
  echo -e "TESTVAR not set\n"
fi

그리고 이것은 출력입니다.

$ export TESTVAR=x
$ ./testenv.sh 
foo
$ export TESTVAR=y
$ ./testenv.sh 
bar
$ export TESTVAR=q
$ ./testenv.sh 
baz
$ unset TESTVAR
$ ./testenv.sh 
./testenv.sh: line 5: [: ==: unary operator expected
./testenv.sh: line 9: [: ==: unary operator expected
baz

내 질문은 'TESTVAR를 설정 해제'하면 무효화되지 않아야한다는 것입니다. 그렇지 않은 것 같습니다 ...


변수를 큰 따옴표로 묶습니다.

if [ "$TESTVAR" = "foo" ]

그렇게하고 변수가 비어 있으면 테스트가 다음으로 확장됩니다.

if [ "" = "foo" ]

인용하지 않으면 다음으로 확장됩니다.

if [  = "foo" ]

구문 오류입니다.


"매개 변수 확장"섹션에서 다음과 같은 내용을 찾을 수 있습니다.

${parameter:-word}
Use Default Values. If parameter is unset or null, the expan‐ sion of word is substituted. Otherwise, the value of parameter is substituted.


Your test to see if the value is set

if [ -n $TESTVAR ]

actually just tests to see if the value is set to something other than an empty string. Observe:

$ unset asdf
$ [ -n $asdf ]; echo $?
0
$ [ -n "" ]; echo $?
1
$ [ -n "asdf" ]; echo $?
0

Remember that 0 means True.

If you don't need compatibility with the original Bourne shell, you can just change that initial comparison to

if [[ $TESTVAR ]]

In Bash (and ksh and zsh), if you use double square brackets you don't need to quote variables to protect against them being null or unset.

$ if [ $xyzzy == "x" ]; then echo "True"; else echo "False"; fi
-bash: [: ==: unary operator expected
False
$ if [[ $xyzzy == "x" ]]; then echo "True"; else echo "False"; fi
False

There are other advantages.


After interpretation of the missing TESTVAR you are evaluating [ == "y" ]. Try any of:

 "$TESTVAR"
 X$TESTVAR == Xy
 ${TESTVAR:-''}

참고URL : https://stackoverflow.com/questions/2981878/checking-for-environment-variables

반응형