无法在 ksh93 中取消设置 IFS。有记录吗?

无法在 ksh93 中取消设置 IFS。有记录吗?

在 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

相关内容