Какие оболочки имеют функции, где «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 не будут достаточно хороши, потому что переменные также необходимы вне подоболочки. Аргументы или имя команды могут быть в переменной, которая может быть классом с дочерним процессом.

  • gnome-terminal: отслеживать каталог на новой вкладке
  • Как работает встроенная структура управления / перенаправления Bash
  • Способ записи нового имени файла на подстановочный знак?
  • Пуленепробиваемый метод для работы с повторяющимися тиражами
  • как создать отдельный процесс в фоновом режиме при запуске переднего плана
  • Управление параллелизмом сценариев bash, наследование стада
  • Что такое $ () в команде?
  • Написание сценария оболочки Unix для вызова функции C и перенаправления данных в файл .txt
  • 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 - лучшая ОС в мире.