在zsh vs bash中导出变量的函数中“local + x”的预期行为是什么?

时间:2016-03-28 07:53:53

标签: bash zsh

在下面的示例中,我有一个导出变量。该名称将重新用作函数中的本地名称。函数内部是一个子进程,它使用具有相同名称的ENV变量。

Bash重新使用原始导出值,而zsh取消设置变量:

function the_func {
  local +x  MY_VAR="new value"
  my -child -process  # === in zsh:  $MY_VAR is undefined
                      # === in bash: $MY_VAR="original"
}

export MY_VAR="original"
the_func

这是zsh或bash中的错误吗?或者只是两者之间的细微差别?

1 个答案:

答案 0 :(得分:0)

事实证明这是两者中的正确行为。 Zsh忽略了" + x"当使用本地。从手册:http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#Shell-Builtin-Commands

local [ +-LRZilrtu [n]] [ name[=value] ]
Same as typeset, except that the options `-x' and `-f' are not permitted