任何人都知道为什么这段代码没有按预期工作?
$> 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)
因为之后发生的|是子壳.子shell中更改的变量不会传播回父shell.
常见的解决方法:
while read line ; do
...
done < <(svn ls http://...)
Run Code Online (Sandbox Code Playgroud)