변수가 설정되지 않았는지 테스트하는 것은 쉬운 것 같습니다. 나는 적어도 세 가지 방법을 알고 있습니다.
#!/bin/ksh
unset var
[ "$#" -gt 0 ] && var=$1
[ "${var+set}" != "${var}" ] && echo set1 || echo unset1
[ "${var+set}" ] && echo set2 || echo unset2
[[ -v var ]] && echo set3 || echo unset3
실행하세요:
$ ./script
unset1
unset2
unset3
또한 ./script ''
및 을 사용해 보십시오 ./script 'value'
.
그러나 변수 이름을 다음으로 변경하면 IFS
세 가지 테스트가 모두 실패합니다 .
#!/bin/ksh
unset IFS
[ "$#" -gt 0 ] && IFS=$1
[ "${IFS+set}" != "${IFS}" ] && echo set1 || echo unset1
[ "${IFS+set}" ] && echo set2 || echo unset2
[[ -v IFS ]] && echo set3 || echo unset3
IFS
ksh93에 설정되어 있지 않은지 실제로 테스트할 수 있는 방법이 있습니까 ?
답변1
예, 가능합니다. 한 가지 방법(가장 간단하지는 않지만 작동함)은 모든 변수 목록에 해당 변수가 포함되어 있는지 확인하는 것입니다.
if [[ `set | grep ^IFS= | wc -l` == 0 ]]; then
echo "IFS variable is unset (not declared)"
fi
또는 없이 wc
(@Kusalananda 덕분에 아래 설명 참조):
if set | ! grep -q ^IFS= ; then
echo "IFS variable is unset (not declared)"
fi