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

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 .

  • Имена файлов каталогов с sed с пробелами
  • Как получить путь, индекс строки и содержимое строки в оболочке bash?
  • использование функции скрипта вместо ввода с клавиатуры
  • Может ли сценарий bash сбросить и дезинфицировать * всю * среду и как?
  • Поддерживают ли оболочки рекурсию?
  • Почему PGID моего дочернего процесса обрабатывает не PID родителя?
  • Передача именованных аргументов в виде массива в сценарии оболочки
  • Как искать слово во всем содержимом каталога в linux
  • Добавление backtick (`) в вывод heredoc в команде оболочки
  • Сохранять коды выхода при захвате SIGINT и тому подобное?
  • POSIX-совместимый / кросс-shell-способ для получения версии запущенной оболочки?
  • Хороший метод для сравнения времени?
  • Interesting Posts

    Как эхо «одиночная кавычка» при использовании одиночной кавычки для обертывания специальных символов в оболочке?

    Список системных вызовов, используемых в приложении

    «Пакет« dconf-cli »не имеет кандидата на установку»

    Декомпрессия gzip-файла на месте

    Перенос PCI: vfio-pci игнорирует идентификаторы устройств

    Как сказать rsync не удалять некоторые папки в пункте назначения?

    Как найти каталог файлов?

    Синяя градиентная линия сверху и снизу вместо Ubuntu-USB-Grub-Screen

    Какие приложения Linux полагаются на возможность чтения и записи в файл одновременно?

    Как загрузить все html-файлы из каталога URL с помощью wget?

    Как установить 64-битное snort на 64-битный openSUSE 13.1?

    Установка реверсивного моста PCIe-PCI в Debian приводит к «неклассифицированному устройству»,

    Данные, записанные в / dev / pts / x внутри обработчика SIGINT (Ctrl + C), случайным образом отбрасываются

    Проверить, если $ 1 ИЛИ $ 2 равны нулю с "-z" – BASH

    Разделенные разделы FreeBSD и Linux

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