변수가 설정되지 않았는지 테스트합니다.

변수가 설정되지 않았는지 테스트합니다.

변수(그 이름은 스크립트에서 정적으로 알려져 있음)가 설정되지 않았는지(비어 있지 않은지) 확인하는 휴대용 테스트가 있습니까?

답변1

스칼라 변수의 경우 표준(POSIX) sh구문이 사용됩니다.

if [ "${var+set}" != set ]; then
  echo var is not set
fi

아니면 더 예쁘지만 덜 명확한 것, 예를 들어

if [ -z "${var++}" ]; then
  echo var is unset
fi

또는:

if ${var+false}; then
  echo var is unset
fi

배열 변수의 경우(배열이가지고 다닐 수 있는), bash 또는 ksh에서는 배열에 목록(빈 목록 포함)이 할당되지 않으면 in zsh또는 yashunset이 반환됩니다.설정되지 않음인덱스 0의 요소가 설정되지 않은 경우. 연관 배열과 동일합니다(키 "0"의 경우).

zsh(시뮬레이션이 아닌 경우 sh) export var또는readonly var 주장하다변수이지만 값을 제공하지 않으므로 그 이외의 쉘은 이를 이 변수로 zsh보고합니다 ( / 를 호출하기 전에 값이 할당되지 않은 경우 ).varunsetvarexportreadonly

답변2

POSIX는 매개변수가 설정되지 않았는지 테스트하기 위해 다양한 매개변수 확장을 정의합니다.

다음 매개변수 확장을 사용하여 매개변수가 설정되지 않았는지 테스트할 수 있습니다. 두 번째 부분(물음표 뒤)을 지정하여 매개변수가 var설정되지 않았음을 나타낼 수 있습니다.

echo ${var?parameter not set}
-sh: var: parameter not set

정의되지 않은 매개변수를 사용하면 프로그래밍 오류가 발생할 수 있습니다.

prompt% sh -u script   # or set -o nounset
  • set특별한 내장 기능을 살펴보세요POSIX 사양.

관련 정보