我在脚本中看到以下代码:
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"
将显示默认值IFS
as
$' \t\n'
这是不安全假设IFS
具有默认值,并且正确引用扩展非常重要,这样就不会发生字段分割。考虑如果IFS
包含数字会发生什么是非常有趣的。
也可以看看