ksh93에 IFS가 설정되어 있지 않은지 테스트하는 방법은 무엇입니까?

ksh93에 IFS가 설정되어 있지 않은지 테스트하는 방법은 무엇입니까?

변수가 설정되지 않았는지 테스트하는 것은 쉬운 것 같습니다. 나는 적어도 세 가지 방법을 알고 있습니다.

#!/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

IFSksh93에 설정되어 있지 않은지 실제로 테스트할 수 있는 방법이 있습니까 ?

답변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

관련 정보