недокументированное изменение поведения «локального», встроенного в bash 4.3?

В bash 4.2 переменная, объявленная как локальная для функции, но без значения по умолчанию, не входит в список переменных – по крайней мере, до «declare -p»:

vermicelli$ bash --version | grep release GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu) vermicelli$ bash -c 'f1() { local Y; declare -p Y; }; f1' declare -- Y vermicelli$ 

Однако в bash 4.3 это уже не так:

 lasagne$ bash --version | grep release GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu) lasagne$ bash -c 'f1() { local Y; declare -p Y; }; f1' bash: line 0: declare: Y: not found lasagne$ 

Является ли это изменение поведения документированным где угодно?

Если задано значение по умолчанию (например, измените «местный Y» на «местный Y = 42»), то обе версии bash ведут себя одинаково.

(Я проверил man-страницу bash 4.3, в частности параграфы, касающиеся объявления и локальных встроенных функций, параметр shopt compat42, а также FAQ, в частности пункт, касающийся того, что нового в 4.3, но я не нахожу любое упоминание об этом изменении поведения.)

  • Как выполнить специальное слово в bash
  • Переименование всех файлов в папке Bash
  • Прочитать ~ / .bash_profile, но не / etc / profile
  • Bash for loop создает папки; мне нужно избегать некоторых символов?
  • Как запустить команды bash и оставить приглашение открытым?
  • Bash: что такое присвоение `a =` определено?
  • Список всех файлов, содержащих определенную строку.
  • Выполнить строку с переменными как команду
  • One Solution collect form web for “недокументированное изменение поведения «локального», встроенного в bash 4.3?”

    Выдержки из журнала изменений bash:

    В этом документе описываются изменения между этой версией, bash-4.4-alpha и предыдущей версией, bash-4.3-release.

    3. Новые возможности в Bash

    е. Опция -p для объявления и подобные встроенные элементы будут отображать атрибуты для именованных переменных, даже если эти переменные не были присвоены значениям (которые технически не заданы).


    В этом документе описываются изменения между этой версией, bash-4.3-alpha и предыдущей версией bash-4.2-release.

    1. Изменения в Bash

    хххх. Исправлена ​​ошибка, вызвавшая declare и test для поиска переменных, которым были присвоены атрибуты, но не присвоенные значения. Такие переменные не заданы.

    Обратите внимание, что local – это просто псевдоним для declare , за исключением того, что local ошибки выходят, когда он не вызывается внутри функции.

    Похоже, что typeset -p переменных typeset -p list unset был признан ошибкой, но затем поведение было отменено, потому что declare -p список таких переменных является «достаточно общим запросом» .

    Interesting Posts

    Безопасно ли оставить корневую оболочку, запущенную в сеансе отдельного экрана?

    вызов функции Bash из определения псевдонима

    Невозможно объяснить поведение ACL

    Сделать загрузочный USB из файла .elf

    Свободное пространство, показывающее проблему в команде `parted`?

    Что происходит с локальным трафиком локальной сети на Linux-адресе без обратной связи?

    В: Как сообщить ядру Linux игнорировать устройства MULTIPLE ata?

    как перемещать файлы из одной папки в другую с добавлением отметки времени к имени?

    Параллельное выполнение сценария bash

    Файл pcap в 20 раз меньше, чем ifconfig Разница TX / RX за тот же период

    Создание точной копии установки Windows

    Поиск большого количества расширений с помощью find

    Как я могу условно передать подоболочку через «время»?

    Корень не может удалить файл на ext4

    Добавление пользовательских последовательностей ключевых слов

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