在下面的示例中,我有一个导出变量。该名称将重新用作函数中的本地名称。函数内部是一个子进程,它使用具有相同名称的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中的错误吗?或者只是两者之间的细微差别?
答案 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