说我在bash函数中有这个
ql_do_x(){
local foo="bar";
if true; then
foo="zam";
fi
}
如果我跑:
foo="unmodified"
ql_do_x
echo "$foo"
...是否保证foo
的外部值将是"未修改",即使local
关键字仅用于函数中的第一个赋值,不是第二个?
答案 0 :(得分:5)
当然,是的。事实上,如果你依赖它,并将你的变量先前声明给他们的作业,它会更好。考虑以下(非常不常见)示例,其中分配的值来自命令替换,以及我们想要处理命令替换失败的情况:
ql_do_x() {
local foo
if ! foo=$(bar); then
foo=baz
fi
}
如果您运行if ! local foo=$(bar)
,那么它始终是真的(在!
之前),因为您正在测试local
的退出状态(作为command,具有退出状态 - 如果提供的变量名有效,则始终为true),而不是运行bar
的命令替换。