Quais shells têm funções onde “local” não altera variáveis exportadas para processos filhos?

1

No exemplo abaixo, uma variável export ed é reajustada como local em uma função. Bash, Zsh, Fish não passa o valor original para o processo filho. Há algum shells que faça com que local afete apenas o corpo da função local, mas passe o valor original export ed para o processo filho?

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

As variáveis subshell e readonly não serão boas o suficiente porque as variáveis também são necessárias fora da subshell. Os argumentos ou nome do comando podem estar em uma variável que possa ser classificada com o processo filho.

    
por dgo.a 28.03.2016 / 07:22

1 resposta

2

  1. mksh
  2. Bash com declare +x MY_VAR=value . ( local +x e typeset +x também funcionam).

No entanto, no Bash, ele falharia sob essas condições:

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

Ele se comporta intuitivamente em mksh .

    
por 29.03.2016 / 07:10