在 ksh93 中,可以像这样取消设置任何变量:
$ var=value; echo "$<${var+set}"
<set>
$ unset var; echo "<${var+set}>"
<>
但是,IFS
工作方式并不相同:
$ unset IFS; echo "<${IFS+set}>"
set
在我测试的任何其他 shell 中都没有发生这种情况。这可能是一个错误,但对我来说似乎是故意的。
但是,我找不到它的记录在哪里(如果有的话)。
另外,使用:+
only 将扩展扩展为空值:
$ 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