bash - 如果重新分配,局部变量是否保持局部变量?

标签 bash shell

假设我在 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/

相关文章:

linux - 如何从 bz2 存档中获取文件列表(ls 命令)?

bash - 如何从浏览器运行 bash 脚本?

bash - 在 Bash 中提取单词后的字符串文本

python - 当我尝试在 Docker 容器中运行 shell 脚本时无法打开文件

shell - Emacs:终端与 shell ?

python - 使用 Paramiko 组合交互式 shell 和 receive_exit_status 方法

linux - 为什么从 "find: paths must precede expression"返回多个结果时会触发错误 "find"

macos - 在 OS X 中使用 find 来识别正确的权限

json - Mongodb 聚合返回一个循环 Json 对象,而在 shell 中它返回一个 json?

bash - bash 中的 $(shell) 引用