변수(그 이름은 스크립트에서 정적으로 알려져 있음)가 설정되지 않았는지(비어 있지 않은지) 확인하는 휴대용 테스트가 있습니까?
답변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
또는 yash
unset이 반환됩니다.설정되지 않음인덱스 0의 요소가 설정되지 않은 경우. 연관 배열과 동일합니다(키 "0"의 경우).
zsh
(시뮬레이션이 아닌 경우 sh
) export var
또는readonly var
주장하다변수이지만 값을 제공하지 않으므로 그 이외의 쉘은 이를 이 변수로 zsh
보고합니다 ( / 를 호출하기 전에 값이 할당되지 않은 경우 ).var
unset
var
export
readonly
답변2
POSIX는 매개변수가 설정되지 않았는지 테스트하기 위해 다양한 매개변수 확장을 정의합니다.
- 저것 좀 봐(이거POSIX 사양!
다음 매개변수 확장을 사용하여 매개변수가 설정되지 않았는지 테스트할 수 있습니다. 두 번째 부분(물음표 뒤)을 지정하여 매개변수가 var
설정되지 않았음을 나타낼 수 있습니다.
echo ${var?parameter not set}
-sh: var: parameter not set
정의되지 않은 매개변수를 사용하면 프로그래밍 오류가 발생할 수 있습니다.
prompt% sh -u script # or set -o nounset
set
특별한 내장 기능을 살펴보세요POSIX 사양.