如果本地变量被重新分配,它是否会保留在本地?

时间:2018-04-21 20:21:46

标签: bash shell

说我在bash函数中有这个

ql_do_x(){
   local foo="bar";
   if true; then
      foo="zam";
   fi
}

如果我跑:

foo="unmodified"
ql_do_x
echo "$foo"

...是否保证foo的外部值将是"未修改",即使local关键字仅用于函数中的第一个赋值,不是第二个?

1 个答案:

答案 0 :(得分:5)

当然,是的。事实上,如果你依赖它,并将你的变量先前声明给他们的作业,它会更好。考虑以下(非常不常见)示例,其中分配的值来自命令替换,以及我们想要处理命令替换失败的情况:

ql_do_x() {
  local foo
  if ! foo=$(bar); then
    foo=baz
  fi
}

如果您运行if ! local foo=$(bar),那么它始终是真的(在!之前),因为您正在测试local的退出状态(作为command,具有退出状态 - 如果提供的变量名有效,则始终为true),而不是运行bar的命令替换。