显示当前变量IFS:
echo $IFS |xxd
00000000: 0a
Run Code Online (Sandbox Code Playgroud)
我想重置IFS为默认值\t\n。
IFS=$' \t\n'
echo $IFS |xxd
00000000: 0a
Run Code Online (Sandbox Code Playgroud)
为什么无法重置 IFS 变量?
您正在IFS正确重置。问题出在你的echo. 你应该使用echo -n "$IFS" | xxd.
看看man bash(强调我的):
分词
shell 扫描未出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。
shell 将 的每个字符视为
IFS分隔符,并将其他扩展的结果拆分为这些字符上的单词。 如果IFS未设置,或者其值恰好是<space><tab><newline>默认值,则忽略先前扩展结果的开头和结尾处的<space>、<tab>、 和<newline>序列,并且IFS不在开头或结尾处的任何字符序列用于分隔单词。如果IFS具有默认值以外的值,则只要空白字符位于(空白字符) 的值中,space则tab在单词的开头和结尾处都会忽略空白字符 和 的序列。其中的任何非空白字符以及任何相邻的空白字符都会分隔字段。空白字符序列也被视为分隔符。如果 的值为空,则不会发生分词。IFSIFSIFSIFSIFSIFSIFS
由于您没有使用双引号IFS,因此它会经历 shell 的分词逻辑。由于IFS根据定义包含IFS其自身内的字符,因此 shell 会忽略它们。双引号可以防止这种情况发生。
| 归档时间: |
|
| 查看次数: |
3671 次 |
| 最近记录: |