bash:从一个用&调用的函数分配给bash中的数组。控制操作员

时间:2012-07-31 13:49:13

标签: arrays bash function

我想知道为什么会这样:

arr=()
fun() { arr[$1]=$2; }
fun 1 2
echo ${arr[1]}
# echoes '2'

但这不是:

arr=()
fun() { arr[$1]=$2; }
fun 1 2 &
wait
echo ${arr[1]}
# echoes a blank line

2 个答案:

答案 0 :(得分:2)

通过在第二个示例中在后台运行fun,可以在子shell中运行它。子shell中对数组所做的更改对于父shell是不可见的,您可以在其中回显arr[1]的值。

答案 1 :(得分:0)

这不起作用,因为异步运行函数会创建一个新的shell上下文,它无法修改父上下文的环境。这非常类似于管道到控制结构中,其中控制结构内部修改的变量不会在管道外部的父级中修改。