недокументированное изменение поведения «локального», встроенного в 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 спросить вас, хотите ли вы выполнить следующий сегмент (часть)?
  • Какова команда «добавить» строку в файл?
  • использовать she-bang in oneliner
  • Как написать небольшой журнал с bash?
  • проблема чтения и сравнения файлов с использованием вложенных циклов
  • Как экспортировать переменные из файла?
  • Как использовать переменную вместо файла для вывода этой команды wc
  • 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

    Сетевой менеджер Gnome OpenVPN

    Что именно сделал mv / tmp / folder / * / * в моей файловой системе?

    Разница между командами whoami и whoami

    Как я могу изменить логин при аутентификации на SSH?

    Использование awk и grep для результатов iftop

    Что делает! # (Восклицательный знак хэш),! $: R: r (восклицательный знак доллара д),! #: T (восклицательный знак хэша) означает в нижних командах bash?

    Сравнить строки и обновить два разных файла

    Невозможно установить пакеты на RHEL из-за зависимостей

    Сценарий, который использует запрос MySQL для автоматического удаления вывода

    Ожидать скрипта для командной строки

    Как перенести файлы из определенных каталогов во вновь созданные каталоги на основе их расширения?

    Ошибка ввода Whiptail / диалога при выполнении из rc.local

    grep также возвращает не соответствующие строки

    Расширение параметров

    перенаправление портов в приложение в пространстве имен в сети с помощью vpn

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