为什么无法重置IFS变量?

4
显示当前变量 IFS
echo $IFS |xxd
00000000: 0a  

我希望将 IFS 的默认值重置为 \t\n
IFS=$' \t\n'
echo $IFS |xxd
00000000: 0a  

为什么无法重置IFS变量?
1个回答

5
你已经正确地重置了IFS,问题出在你的echo上。应该使用echo -n "$IFS" | xxd
查看man bash(强调是我的):
单词拆分
Shell会扫描参数展开、命令替换和算术展开的结果,对于未在双引号内出现的字符进行单词拆分。Shell将IFS的每个字符视为分隔符,并在这些字符上将其他展开的结果拆分成单词。如果IFS未设置,或其值恰好为默认值<space><tab><newline>,则忽略前面和后面的空格、制表符和换行符,并且除此之外的任何IFS字符序列都将用于分隔单词。如果IFS的值不是默认值,则忽略单词前后的空格和制表符,只要空格或制表符是IFS值中的空白字符即可。任何不是IFS空白字符的IFS字符及其相邻的IFS空白字符都用于分隔字段。一系列的IFS空白字符也被视为分隔符。如果IFS的值为空,则不进行单词拆分。
由于你没有对IFS使用双引号,它会通过Shell的单词拆分逻辑。由于IFS本身包含IFS字符,因此Shell将其忽略。使用双引号可以避免这种情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接