可以在被调用函数中访问调用函数的局部变量

时间:2015-11-16 10:58:25

标签: linux bash shell

最近在工作时我注意到了局部变量的这种行为。我写了这段代码来简化我的疑问。

foo () {
    echo "This is moo : $MOO_VAR"
}

moo () {
    local MOO_VAR="Hi MOO!"
    foo
}

echo "calling moo."
moo

我无法理解函数foo如何访问函数MOO_VAR的局部变量moo的值,尽管foo无法更改MOO_VAR的值}。我找不到任何有关此行为的解释。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

这是bash的documented行为。看起来本地只是意味着,将该变量恢复到函数末尾的先前状态。由于变量是如何在bash中实现的(存储在全局命名空间中),这意味着如果没有先在每个函数调用之前取消设置变量然后在之后恢复变量,则不能从子节点隐藏变量。