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

为什么这里的“read”在与unquoted here字符串一起使用时不能正确填充数组?[副本]

  •  1
  • mickp  · 技术社区  · 6 年前

    我在使用 read bash ). 请看以下片段:

    在这里 echo $line IFS=: 结果是 echo a b c - 好 啊

    IFS=:
    line=a:b:c
    
    echo $line | { read -ra arr; declare -p arr; }
    

    输出:

    declare -a arr='([0]="a b c")'
    

    回音$行 结果 echo a:b:c IFS 阅读 如果S=: 并正确填充数组- :

    unset IFS
    line=a:b:c
    
    echo $line | { IFS=: read -ra arr; declare -p arr; }
    

    输出:

    declare -a arr='([0]="a" [1]="b" [2]="c")'
    

    unset IFS
    line=a:b:c
    echo $line # outputs correctly a:b:c
    
    IFS=: read -ra arr <<< $line
    declare -p arr
    

    a:b:c
    declare -a arr='([0]="a b c")'
    

    在这里 <<< $line <<< a:b:c 自从 $line 不包含任何来自 国际单项体育联合会 . 阅读 然后应该使用 如果S=: 但结果只有一个元素,用空格分隔。

    我在用 GNU bash, version 4.1.17(1)-release (sparc-sun-solaris2.11) 这里的字符串曾经被分词。引用 解决 echo $line ... 这个例子很好用。

    GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)

    1 回复  |  直到 6 年前
        1
  •  1
  •   rici    6 年前

    这是bash version 4.2(显然是4.1.x版本)中的一个已知错误,在version4.3中已修复。看这个 bug-bash thread ,其中引用了 this StackOverflow question @chepner's answer 关于那个问题。