在下面的示例中,像在函数中export
一样重新设置 ed 变量 。 local
Bash、Zsh、Fish 不会将原始值传递给子进程。是否有任何 shelllocal
只影响本地函数体,但将原始export
ed 值传递给子进程?
function the_func {
local MY_VAR="new value"
echo "=== $MY_VAR" # === prints "new value"
my -child -process # === gets MY_VAR="original"
}
export MY_VAR="original"
the_func
子 shell 和只读变量还不够好,因为在子 shell 之外也需要这些变量。命令的参数或名称可以位于可能与子进程分类的变量中。
答案1
- 姆克什
- 猛击与
declare +x MY_VAR=value
. (local +x
也typeset +x
可以工作)。
然而,在 Bash 中,它会在以下情况下失败:
my_func () {
local +x MY_VAR="..."
bash my.sh # ERROR in Bash: this gets "original" instead of "2nd def"
# Works in mksh: "2nd def" is passed.
}
export MY_VAR="original"
MY_VAR="2nd def" my_func
它直观地表现在姆克什。