Какие оболочки имеют функции, где «local» не изменяет экспортированные переменные для дочерних процессов?

В приведенном ниже примере переменная export как local функция. Bash, Zsh, Fish не передают исходное значение дочернему процессу. Существуют ли какие-либо оболочки, которые локали затрагивают только локальное тело функции, но передают исходное значение export в дочерний процесс?

 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 

Переменные подголовья и readonly не будут достаточно хороши, потому что переменные также необходимы вне подоболочки. Аргументы или имя команды могут быть в переменной, которая может быть классом с дочерним процессом.

  • Как совместить поток с белым списком и черным списком?
  • Скрипт всегда запускает два экземпляра
  • Как я могу интерполировать текстовый файл трехмерных координат (X, Y, Z) на регулярную сетку?
  • Автозаполнение оболочки очень медленное после форматирования частичного диска
  • Сохраняется ли существующий файл при создании символической ссылки с тем же именем?
  • Есть ли хороший способ установить локальные переменные среды каталога / проекта?
  • Нарушается ли поведение CDPATH в раке bourne (/ bin / sh)
  • Сериализовать переменную оболочки в bash или zsh
  • One Solution collect form web for “Какие оболочки имеют функции, где «local» не изменяет экспортированные переменные для дочерних процессов?”

    1. МКШ
    2. Bash с declare +x MY_VAR=value . ( local +x и typeset +x также работают).

    Однако в Баше в этих условиях не получилось:

     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 

    Он ведет себя интуитивно в mksh .

    Linux и Unix - лучшая ОС в мире.