我想知道为什么会这样:
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
答案 0 :(得分:2)
通过在第二个示例中在后台运行fun
,可以在子shell中运行它。子shell中对数组所做的更改对于父shell是不可见的,您可以在其中回显arr[1]
的值。
答案 1 :(得分:0)
这不起作用,因为异步运行函数会创建一个新的shell上下文,它无法修改父上下文的环境。这非常类似于管道到控制结构中,其中控制结构内部修改的变量不会在管道外部的父级中修改。