编辑说明:
也许下面来自原帖回答的内容更能说明这种令人惊讶的行为:
即,
在 Zsh 和 Bash 中,如果我有以下函数
有没有办法禁用函数间的变量溢出?
我正在处理一份在工作中非常重要的、使用了大量变量的bash/zsh脚本。许多函数都依赖于一个更大的主函数,但由于变量溢出,一些不幸和意外的行为和错误已经浮现出来,这阻止了我自信地推进开发,因为我想先解决这个奇怪的问题。
我甚至尝试使用
编辑:请注意,我的问题不是关于如何使用本地变量来防止变量溢出或关于本地变量的工作原理、如何设置本地变量、如何为已声明的本地变量分配新值等等:它是关于如何防止变量流入调用/被调用函数的范围之内。
也许下面来自原帖回答的内容更能说明这种令人惊讶的行为:
f() { local b=1; g; echo $b; }; g() { b=2; }; f # -> '2'
即,
g()
能够修改 f()
的本地变量 $b
。
在 Zsh 和 Bash 中,如果我有以下函数
f() { a=1; g; echo $a; }
和以下函数 g() { a=2; }
,当我运行 f
时,输出如下,而不是预期的:$ f
2
有没有办法禁用函数间的变量溢出?
我正在处理一份在工作中非常重要的、使用了大量变量的bash/zsh脚本。许多函数都依赖于一个更大的主函数,但由于变量溢出,一些不幸和意外的行为和错误已经浮现出来,这阻止了我自信地推进开发,因为我想先解决这个奇怪的问题。
我甚至尝试使用
local
来本地化变量,但效果仍然存在。编辑:请注意,我的问题不是关于如何使用本地变量来防止变量溢出或关于本地变量的工作原理、如何设置本地变量、如何为已声明的本地变量分配新值等等:它是关于如何防止变量流入调用/被调用函数的范围之内。