您在Stack Exchange上找到的答案是正确的,而本教程是错误的。您可以自己尝试或在标准中查找。取消设置IFS
等同于将其设置为space-tab-newline的默认值,而设置为空则IFS
有效地关闭字段拆分。
您可以查阅IFS上Sven Mascheck的页面上有关历史实现的信息。一些历史上的shell不喜欢它unset IFS
,而ksh的一个很旧的版本将其视为空,IFS
但是所有现代的shell和大多数旧的shell都将unset视为IFS
默认值。
IFS=
除非要关闭字段拆分,否则不应该使用脚本开始(这可能是一个合理的决定,但是请注意,除非您也将其关闭,否则您仍需要在替换内容前后加上双引号,以免产生乱码set -f
)。要重置默认值,请使用unset IFS
。在脚本开始时是否有用还存在争议。还有很多其他不好的事情,例如PATH
调用程序可以使您的脚本出错的躲避程序。
本教程还建议重置PATH
。这通常是个坏建议。在大多数情况下,您无法预测正确的搜索路径,但是用户知道。你怎么知道是否/usr/local/bin
或/home/bob/bin
包含在一个古老的UNIX实用程序错误修正版本,其中在那些/usr/bin
有车?您是否真的想嵌入所有逻辑以找出是否要/usr/xpg6/bin
领先/bin
?您想在什么位置/usr/gnu/bin
?除非您的脚本针对特定系统,否则不要重置PATH。
我还没有阅读本教程,但是我确实检查了一件事:它从一开始就没有告诉您总是将双引号放在变量替换和命令替换周围。因此,我认为本教程不是一个很好的教程。
unset IFS
尽管会重置字段拆分,但不会将bfash中的IFS重置为其默认值。