ksh93にIFSが設定されていないかどうかをテストする方法は?

ksh93にIFSが設定されていないかどうかをテストする方法は?

変数が設定されていないかどうかをテストするのは簡単です。私は少なくとも3つの方法を知っています。

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

ただし、変数名を次に変更すると、3IFSつのテストすべてが失敗します。

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

はい、可能です。 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

関連情報