假设 IFS 已设置是否安全?

假设 IFS 已设置是否安全?

我在脚本中看到以下代码:

OLD_IFS="$IFS"
IFS='something-special'
# code that needs the special IFS
# ...
IFS="$OLD_IFS"

如果IFS在脚本片段之前没有设置 ,则脚本将其设置为空字符串,并且空IFS和未定义IFS是不同的。

该脚本可能假设IFS始终已设置。做出这样的假设安全吗?

答案1

是的,可以肯定地假设已经IFS设置了。

默认值为IFS是一个由空格、制表符和换行符组成的字符串。这是一个要求POSIX 标准:

shell 应在调用时设置IFS为。<space> <tab> <newline>

bash具有默认设置的 shell 中,printf '%q\n' "$IFS"将显示默认值IFSas

$' \t\n'

这是不安全假设IFS具有默认值,并且正确引用扩展非常重要,这样就不会发生字段分割。考虑如果IFS包含数字会发生什么是非常有趣的。

也可以看看

相关内容