Что будет нового в Bash 5

30

Я просто просматривал официальный репозиторий bash (обычно я так не делаю) для чего-то не связанного, но заметил, что bash 5 уже находится в бета-версии. Мне было просто интересно узнать, что будет нового в bash 5, но не смог найти никакой информации. Может кто-нибудь обобщить изменения между 4.4 и 5 версией Bash

akabhirav
источник
6
Это прямо в CHANGESфайле: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

Ответы:

21

Изменения, внесенные в bashвыпуск 4.4 и 5.0 (выпущен 2019-01-07), можно найти в NEWSфайле в bashисходном дистрибутиве.

Вот ссылка на него (изменений слишком много, чтобы перечислять здесь).

Кусалананда
источник
Краткий обзор показывает термин loadable builtins. Следует ли bashновый стандарт, установленный, ksh93чтобы найти улучшенные встроенные функции PATHвместо того, чтобы отдавать им всегда приоритет?
Щили
@schily bash4.4 и более поздние версии используют BASH_LOADABLES_PATHи загружают их оттуда с помощью enable -f builtin-name.
Кусалананда
Что ж, похоже, это относится ко времени загрузки команды. Как насчет прошедшего времени? enableвыглядит как переопределение ksh93команды, builtinно в ней отсутствует возможность связать путь с каждой встроенной командой, которая ksh93обычно предопределена /usr/ast/bin/<name>и позволяет иметь детальный контроль над всеми строениями.
Шили
@Kusalananda как я могу получить новый bash 5.0
Анкур Лория
@AnkurLoriya Вы ждете, пока ваш дистрибьютор Unix не отправит его в виде пакета, или вы сами скомпилируете его из источников. Исходники и инструкции по установке доступны на странице GNU Bash .
Кусалананда
14

Если вы, как и я, ищите заголовки, а не полный список изменений, то этот пост от сопровождающего, Чета Рэйми, выходит за рамки этого. Вот интересный раздел:

Этот выпуск исправляет несколько выдающихся ошибок в bash-4.4 и вводит несколько новых функций. Наиболее значительными исправлениями ошибок являются пересмотр способа разрешения переменных nameref и ряд потенциальных ошибок памяти за пределами границ, обнаруженных с помощью фаззинга. Есть ряд изменений в расширении $ @ и $ * в различных контекстах, где разделение слов не выполняется для соответствия стандартной интерпретации Posix, и дополнительные изменения для разрешения угловых случаев для соответствия Posix.

Наиболее заметными новыми функциями являются несколько новых переменных оболочки: BASH_ARGV0, EPOCHSECONDS и EPOCHREALTIME. Встроенная «история» может удалять диапазоны записей истории и воспринимает отрицательные аргументы как смещения из конца списка истории. Существует возможность разрешить локальным переменным наследовать значение переменной с тем же именем в предыдущей области. Существует новая опция оболочки, которая при включении заставляет оболочку пытаться развернуть индексы ассоциативных массивов только один раз (это проблема, когда они используются в арифметических выражениях). Опция оболочки globasciiranges теперь включена по умолчанию; он может быть отключен по умолчанию во время настройки.

Есть несколько несовместимых изменений между bash-4.4 и bash-5.0. Изменения в способе разрешения переменных nameref означают, что некоторые варианты использования namerefs будут вести себя по-разному, хотя я попытался минимизировать проблемы совместимости. По умолчанию оболочка устанавливает BASH_ARGC и BASH_ARGV только при запуске, если расширенный режим отладки включен; это было упущением, что оно было установлено безоговорочно и вызывало проблемы с производительностью, когда сценариям передавалось большое количество аргументов.

Он также ссылается на эти два файла, если вы хотите больше:

Jacktose
источник
5

Встроенная «история» может удалять диапазоны записей истории и воспринимает отрицательные аргументы как смещения из конца списка истории.

Пример удаления диапазона:

history -d 123-130

или удаляя последние 10:

history -d -10--1

Отрывок из страницы Bash 5 Man :

«История»

Опции, если они есть, имеют следующие значения:

'-d OFFSET' Удалить запись истории в позиции OFFSET. Если значение OFFSET положительное, его следует указать так, как оно отображается при отображении истории. Если значение OFFSET отрицательное, оно интерпретируется как относительное относительно единицы, превышающей последнюю позицию в истории, поэтому отрицательные индексы отсчитываются с конца истории, а индекс «-1» относится к текущей команде «history -d».

'-d START-END' Удалить записи истории между позициями START и END включительно. Положительные и отрицательные значения для START и END интерпретируются, как описано выше.

Смотрите мой связанный ответ: Удалить диапазон истории bash

Дэвид Хэтч
источник