哪些 shell 具有“local”不会更改子进程的导出变量的函数?

哪些 shell 具有“local”不会更改子进程的导出变量的函数?

在下面的示例中,像在函数中export一样重新设置 ed 变量 。 localBash、Zsh、Fish 不会将原始值传递给子进程。是否有任何 shelllocal只影响本地函数体,但将原始exported 值传递给子进程?

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

  1. 姆克什
  2. 猛击与declare +x MY_VAR=value. (local +xtypeset +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

它直观地表现在姆克什

相关内容