Bash:无法在管道右侧构建阵列

jon*_*ohn 4 arrays bash shell

任何人都知道为什么这段代码没有按预期工作?

$> svnTags=()
$> svn ls http://plugins.svn.wordpress.org/duplicate-post/tags/ | while read line; do slashless=$(sed 's#/$##g' <<< $line); echo "slashless - $slashless"; svnTags+=($slashless); done
slashless - 1.0
slashless - 1.1
slashless - 1.1.1
slashless - 1.1.2
slashless - 2.0
slashless - 2.0.1
slashless - 2.0.2
slashless - 2.1
slashless - 2.1.1
slashless - 2.2
slashless - 2.3
$> echo "$svnTags[@]"
Run Code Online (Sandbox Code Playgroud)

没有给出任何输出,我期望它输出svn标签的构建数组.

第二个命令爆发:

svn ls http://plugins.svn.wordpress.org/duplicate-post/tags/ | while read line; do
    slashless=$(sed 's#/$##g' <<< $line)
    echo "slashless - $slashless"
    svnTags+=($slashless)
done
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 8

因为之后发生的|是子壳.子shell中更改的变量不会传播回父shell.

常见的解决方法:

while read line ; do
    ...
done < <(svn ls http://...)
Run Code Online (Sandbox Code Playgroud)