代码之家  ›  专栏  ›  技术社区  ›  showkey

为什么不能重置IFS变量?

  •  1
  • showkey  · 技术社区  · 4 年前

    显示当前变量 IFS :

    echo $IFS |xxd
    00000000: 0a  
    

    我想重置 如果 作为默认值 \t\n .

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

    为什么不能重置IFS变量?

    0 回复  |  直到 4 年前
        1
  •  4
  •   0x5453 Yuki    4 年前

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

    看看 man bash (强调我的):

    单词拆分

    shell扫描参数展开、命令替换和算术展开的结果 双引号内没有出现这种情况 为了分词。

    shell处理以下每个字符 如果 并将其他扩展的结果拆分为这些字符上的单词。 如果 如果 未设置,或其值完全正确 <space><tab><newline> ,默认值,然后是序列 <space> , <tab> ,以及 <newline> 在前面展开的结果的开头和结尾处忽略 ,以及任何序列 如果 不在开头或结尾的字符用于分隔单词。如果 如果 具有默认值以外的值,然后是空白字符序列 space tab 只要空格字符的值为 如果 如果 空白字符)。任何字符 如果 那不是 如果 空白,以及任何相邻的 如果 空白字符,用于分隔字段。一系列 如果 空白字符也被视为分隔符。如果值 如果 如果为null,则不会发生分词。

    既然你没有重复引用 如果 ,它通过shell的分词逻辑。自从 如果 根据定义,包含 如果 字符本身,它们会被shell忽略。双引号可以防止这种情况。