在以下脚本中,函数 (g) 的局部变量 (i) 的值被它调用的函数 (f) 覆盖。
#!/usr/bin/env bash
f() {
#local i # Let's assume whoever wrote this function f forgot,
# to declare its variables as being local to it
i=0
}
g() {
local i # How to declare i as being only modifiable in the
# scope of g, but not by functions g calls?
for i in 1 2 3; do
f # overwrites the value of i with 0
echo "i: $i"
done
}
g
# output:
# i: 0
# i: 0
# i: 0
有没有办法将 bash 变量的暴露限制在它们声明的范围内?
如果有人没有明确地将它们声明为全局变量(例如使用 declare -g),是否有办法使变量默认为函数局部?
唯一的方法是在子shell中运行麻烦的代码:
变量是全局的,除非它们被声明为局部的。这是无法避免的。
local
哦,我忘记了直接影响这种情况的一个非常重要的方面:声明的“局部”变量在任何调用的函数g
中都是可读写的(到任何深度)。g
g
i
inf
在g
.从手册(我的重点):
相当切题的是,Perl 的命令也有同样的“问题”,而这个问题
local
已经被一个新my
命令解决了: