недокументированное изменение поведения «локального», встроенного в 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, но я не нахожу любое упоминание об этом изменении поведения.)

  • преобразование в нижний регистр и преобразование файлов в текст, появился пустой файл * .txt
  • Stat работает в Bash 4.3, но не в Bash 3.2?
  • Как перечислить все комбинации слов?
  • Изменено ли поведение функции экспорта в bash?
  • Странно: завершение фона bash убивает родителя?
  • Почему мой цикл while игнорирует условие и продолжает действовать навсегда?
  • Добавить в глобальную переменную внутри цикла?
  • Почему эти два варианта команд, которые похожи, дают разные результаты?
  • 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
    Linux и Unix - лучшая ОС в мире.