任何人都知道为什么此代码无法按预期工作?

$> 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[@]"

没有给出任何输出,我希望它能输出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

最佳答案

因为|之后发生的事情是一个子 shell 。在子 shell 程序中更改的变量不会传播回父 shell 程序。

常见的解决方法:

while read line ; do
    ...
done < <(svn ls http://...)

关于arrays - bash :无法在管道右侧构建数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11656013/

10-12 18:31