最近在工作时我注意到了局部变量的这种行为。我写了这段代码来简化我的疑问。
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
的值}。我找不到任何有关此行为的解释。有人可以解释为什么会这样吗?
答案 0 :(得分:2)
这是bash的documented行为。看起来本地只是意味着,将该变量恢复到函数末尾的先前状态。由于变量是如何在bash中实现的(存储在全局命名空间中),这意味着如果没有先在每个函数调用之前取消设置变量然后在之后恢复变量,则不能从子节点隐藏变量。