您正在重置
IFS
正确地。问题出在你的
echo
。你应该使用
echo -n "$IFS" | xxd
.
看看
man bash
(强调我的):
单词拆分
shell扫描参数展开、命令替换和算术展开的结果
双引号内没有出现这种情况
为了分词。
shell处理以下每个字符
如果
并将其他扩展的结果拆分为这些字符上的单词。
如果
如果
未设置,或其值完全正确
<space><tab><newline>
,默认值,然后是序列
<space>
,
<tab>
,以及
<newline>
在前面展开的结果的开头和结尾处忽略
,以及任何序列
如果
不在开头或结尾的字符用于分隔单词。如果
如果
具有默认值以外的值,然后是空白字符序列
space
和
tab
只要空格字符的值为
如果
一
如果
空白字符)。任何字符
如果
那不是
如果
空白,以及任何相邻的
如果
空白字符,用于分隔字段。一系列
如果
空白字符也被视为分隔符。如果值
如果
如果为null,则不会发生分词。
既然你没有重复引用
如果
,它通过shell的分词逻辑。自从
如果
根据定义,包含
如果
字符本身,它们会被shell忽略。双引号可以防止这种情况。