如何测试 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

相关内容