为什么无法重置 IFS 变量?

it_*_*ure 4 reset ifs

显示当前变量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 变量?

0x5*_*453 5

您正在IFS正确重置。问题出在你的echo. 你应该使用echo -n "$IFS" | xxd.

看看man bash(强调我的):

分词

shell 扫描未出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。

shell 将 的每个字符视为IFS分隔符,并将其他扩展的结果拆分为这些字符上的单词。 如果 IFS未设置,或者其值恰好是<space><tab><newline>默认值,则忽略先前扩展结果的开头和结尾处的<space><tab>、 和<newline>序列,并且IFS不在开头或结尾处的任何字符序列用于分隔单词。如果IFS具有默认值以外的值,则只要空白字符位于(空白字符) 的值中,spacetab在单词的开头和结尾处都会忽略空白字符 和 的序列。其中的任何非空白字符以及任何相邻的空白字符都会分隔字段。空白字符序列也被视为分隔符。如果 的值为空,则不会发生分词。IFSIFSIFSIFSIFSIFSIFS

由于您没有使用双引号IFS,因此它会经历 shell 的分词逻辑。由于IFS根据定义包含IFS其自身内的字符,因此 shell 会忽略它们。双引号可以防止这种情况发生。