为什么不能重置IFS变量?

显示当前变量IFS

echo $IFS |xxd
00000000: 0a  

我想将IFS重设为默认值\t\n

IFS=$' \t\n'
echo $IFS |xxd
00000000: 0a  

为什么不能重置IFS变量?

iCMS 回答:为什么不能重置IFS变量?

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

看看man bash(重点是我):

分词

shell扫描参数扩展,命令替换和算术扩展 的结果,这些结果在双引号中没有发生 用于分词。

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

由于您没有对IFS进行双引号处理,因此它会通过Shell的分词逻辑进行处理。由于根据定义,IFS本身包含IFS个字符,因此Shell会忽略它们。双引号可以防止这种情况。

本文链接:https://www.f2er.com/2098259.html

大家都在问