动态范围内的行动

动态范围意味着变量查找发生在调用函数的范围内,而不是在定义函数的位置

$ x=3
$ func1 () { echo "in func1: $x"; }
$ func2 () { local x=9; func1; }
$ func2
in func1: 9
$ func1
in func1: 3

在词法范围的语言中,func1 总是在全局范围内查找 x 的值,因为 func1 是在本地范围内定义的。

在动态范围的语言中,func1 查看调用它的范围。当从 func2 中调用它时,它首先在 func2 的主体中查找 x 的值。如果它没有在那里定义,它将在全局范围内,从那里调用 func2