2
考虑下面的代码:Bash是否有用于递归函数调用的私有堆栈框架?
recursion_test() {
local_var=$1
echo "Local variable before nested call: $local_var"
if [[ $local_var == "yellow" ]]; then
return
fi
recursion_test "yellow"
echo "Local variable changed by nested call: $local_var"
}
输出:
Local variable before nested call: red
Local variable before nested call: yellow
Local variable changed by nested call: yellow
在其它的编程语言,比如Java每个方法调用具有其上局部变量保存一个单独的私人堆栈帧。因此,方法的嵌套调用不能修改父调用中的变量。
在Bash中,所有的调用都共享相同的堆栈框架吗?有没有办法让不同的调用有单独的局部变量?如果没有,是否有一个解决方法来正确编写递归函数,以便一个调用不会影响另一个?