変数が設定されていないかどうかをテストするのは簡単です。私は少なくとも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
IFS
ksh93に設定されていないことを実際にテストする方法はありますか?
答え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