假设我在 bash 函数中有这个
ql_do_x(){
local foo="bar";
if true; then
foo="zam";
fi
}
如果我运行:
foo="unmodified"
ql_do_x
echo "$foo"
...是否保证 foo
的外部值将是“未修改的”,即使 local
关键字仅用于函数中的第一个赋值而不是第二个?
最佳答案
绝对是的。事实上,如果您依靠它并在赋值之前声明您的变量会更好。考虑以下(不是很不寻常的)示例,其中分配的值来自命令替换,并且我们要处理该命令替换失败的情况:
ql_do_x() {
local foo
if ! foo=$(bar); then
foo=baz
fi
}
如果你运行 if ! local foo=$(bar)
,那么它将始终为真(在 !
之前),因为您要测试 local
的退出状态(作为一个命令,它有一个退出状态——如果提供的变量名有效,它总是为真),而不是运行 bar
的命令替换。
关于bash - 如果重新分配,局部变量是否保持局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959910/