당신이 의미하는 바에 달려 있습니다 .
선언되었지만 할당되지 않은 변수 가 있습니까?
빈 목록이 할당 된 배열 (또는 해시) 변수 가 있습니까?
현재 할당되지 않은 변수를 가리키는 nameref 변수 가 있습니까?
당신은 생각하십니까 $-
, $#
, $1
변수? (POSIX는 그렇지 않습니다).
Bourne과 같은 껍질에서 표준 방법은 다음과 같습니다.
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
즉 (assigments, 자동, 빈 여부, 환경에서 변수에 값이 할당되어있는 경우 알려 스칼라 변수 및 기타 매개 변수를 작동 read
, for
또는 다른).
typeset
또는 declare
명령 이있는 쉘의 경우 ,를 제외하고 선언 되었지만 할당 되지 않은 변수를 세트로 보고 하지 않습니다 .zsh
를 제외하고, 배열을 지원하는 쉘의 경우 yash
와 zsh
그대로보고하지 않을 설정 indice 0의 요소가 설정되어 있지 않은 경우 배열 변수.
들어 bash
(그러나 ksh93
도 zsh
), 유형의 변수를 연관 배열 , 그 그들을보고하지 것이다 세트 키 "0"으로 설정되어 자신의 요소를 제외하고.
들어 ksh93
와 bash
, 형의 변수 nameref , 만 true를 돌려 nameref에 의해 참조 변수 자체는 고려 경우 세트 .
의 경우 ksh
, zsh
및 bash
, 잠재적으로 더 나은 방법이 될 수있다 :
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
를 들어 ksh93
, zsh
및 bash
4.4 이상,도있다 :
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
설정되거나 선언 된 변수를보고합니다.
$somevar
변수가없는 경우 값 / 문자열 로 설정하려는 경우 :${somevar:=42}
.