取消设置环境变量是否总是会导致一些后备行为?

取消设置环境变量是否总是会导致一些后备行为?

关于 Bourne shell 和派生程序,我理解IFS它是一个用于字段拆分的行为程序(命令如何将字段拆分为“单词”),这是名为“解析”的更广泛过程所需的。

我读过如果IFS(作为环境变量)未设置(与 一样unset IFS),则 shell应表现得好像IFS 的值为<space><tab><newline>


暂时把可能的严重后果放在一边,直觉上我认为取消设置一个环境变量会在没有警告的情况下删除它,类似于如何在rm -rf /*没有警告的情况下摧毁一个系统,以及类似于发生的情况unset xyz(如取消设置一个人为创建的非环境变量,然后被删除)。


所以,我想说这unset IFS并不是真正取消它,而是将它(在其他地方)重置为某种默认的后备行为。

取消设置环境变量是否总是会导致一些后备行为?

答案1

这不是bash特定的,但适用于所有实现 POSIX 行为的 shell。

取消设置IFSunset IFS取消设置该变量。它不会神奇地获得另一个值。

POSIX 标准明确指出

如果IFS未设置,则对于未设置的变量,它的行为应正常[...]

它接着说,当 shell 想要进行字段分割(分割不带引号的值、分割read输入,以及分隔"$*"字符串中的位置参数时),并且当IFS未设置 时,它应该表现仿佛IFS变量的值包括空格、制表符和换行符。

这与说实用程序(在本例中为 shell)将使用变量(如果可用)没有什么不同,否则具有一些定义良好的默认行为。

另请注意,它IFS不是也不应该是环境变量。即,它永远不需要导出。它仅由当前 shell 及其内置read实用程序使用。 shellIFS在启动时将设置为空格、制表符和换行符。

另请参阅特殊部分外壳变量在 POSIX 标准中。

相关内容