[Shell] bash 스크립트에서 변수 선언여부 체크

by 스뎅(thDeng) on

bash 스크립트에서 변수가 선언되어 있지 않으면 스크립트를 종료시키는 설정을 할 수 있다. 이 설정이 되어 있는 경우 변수 선언여부를 체크하지 않고 사용하면 원치 않는 스크립트 종료가 일어날 수 있다.

이 때 변수 선언여부를 체크하려면 -v로 test하면 된다. test 관련 help 페이지는 아래 명령으로 확인할 수 있다. (-v 옵션은 bash 4.2 이상 버전에서 사용할 수 있다.)

$ help test
test: test [expr]
    Evaluate conditional expression.

    Exits with a status of 0 (true) or 1 (false) depending on the evaluation of EXPR.

    .. 어쩌구 저쩌구 ..

    Other operators:

      -o OPTION      True if the shell option OPTION is enabled.
      `-v VAR True if the shell variable VAR is set`
      ! EXPR         True if expr is false.
      EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
      EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.

주의할 점은 -v의 변수로 변수명을 적어줘야 한다는 것이다.

#!/bin/bash
echo "START"
#BUILD_USER_ID="whoAmI"
if [[ -v BUILD_USER_ID && -n ${BUILD_USER_ID} ]]
then
  echo "set and not blank"
fi
echo "END"
$ ./test
START
END
$ # 주석을 풀어서 `BUILD_USER_ID`가 선언된 경우 아래처럼 출력된다.
$ ./test.sh
START
set and not blank
END

bash 스크립트는 변수를 사용하기 전에 먼저 선언되거나 할당되지 않으면 없는듯이 스쳐지나간다.

만일, 미리 선언되지 않은 변수를 사용했을 때 스크립트를 종료시키고 싶다면 이 옵션을 주면 된다.

set -o nounset
# 또는
set -u

테스트 스크립트를 만들어서 고고!!

#!/bin/bash
set -o nounset

echo "START"
echo ${UNKNOWN_VAR}
echo "END"

결과는 아래처럼 나온다. UNKNOWN_VAR를 찾지 못 한다고 하면서 END를 출력하지 않고 스크립트를 종료해 버린다.

$ ./test.sh
START
./test.sh: line 5: `UNKNOWN_VAR`: unbound variable

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License