Section 27.1: 动态范围
动态范围意味着变了查找范围发生在调用函数的范围内,而不是定义函数的位置
$ 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 的位置。