
ksh93では、次のようにすべての変数を設定解除できます。
$ var=value; echo "$<${var+set}"
<set>
$ unset var; echo "<${var+set}>"
<>
しかし、IFS
同じように動作しません。
$ unset IFS; echo "<${IFS+set}>"
set
私がテストした他のシェルではこれは起こりません。これはバグかもしれませんが、私が見るのは意図的なようです。
ただし、文書化された場所(存在する場合)が見つかりません。
または、:+
NULL値に拡張するためにのみ使用します。
$ var="value"; echo "<${var:+set}> <${var+set}>"
<set> <set>
$ var="" ; echo "<${var:+set}> <${var+set}>"
<> <set>
$ unset var ; echo "<${var:+set}> <${var+set}>"
<> <>
それは問題ではありません。
IFSのみ:
IFS="value"; echo "<${IFS:+set}> <${IFS+set}>"
<set> <set>
IFS="" ; echo "<${IFS:+set}> <${IFS+set}>"
<> <set>
unset IFS ; echo "<${IFS:+set}> <${IFS+set}>"
<> <set> <------------------- should be <> <>
バージョン情報:
ksh -c 'echo "$KSH_VERSION"'
Version AJM 93u+ 2012-08-01