
Кілька днів тому Проєкт GNU оголосив про випуск нової версії Bash 5.3, популярний інтерпретатор команд, який залишається вибором за замовчуванням у більшості дистрибутивів Linux.
Ця нова версія відображає роботу майже трьох років, яка не лише впроваджує покращення мови та поведінки оболонки, але й вводить нові функції, що відповідають сучасним стандартам, таким як C23. Вона також постачається з випуском бібліотеки Readline 8.3.
Що нового в Bash 5.3
Одна з найбільш помітних змін у Bash 5.3 — це Введення нових форм підстановки команд: ${command;} та ${|command;}Це дозволяє перехоплювати вивід команди без створення дочірнього процесу чи використання конвеєрів, що зменшує споживання ресурсів та підвищує продуктивність. Результат можна зберігати безпосередньо у змінній REPLY, що спрощує поширені завдання захоплення виводу.
Ще однією новою функцією, представленою в GNU Bash 5.3, є нова змінна GLOBSORT дозволяє визначити порядок сортування під час розгортання шляхів до файлів. Користувачі можуть сортувати за назвою, розміром, датою зміни тощо, з опціями як за зростанням, так і за спаданням.
Крім того, у Bash 5.3 представлено покращення кількох вбудованих команд. Команда compgen тепер може зберігати згенеровані автодоповнення у змінній (-V назва змінної), тоді як read додає опцію -E для використання бібліотеки Readline з правилами автодоповнення Bash. Вихідний код також було покращено, тепер підтримується -p PATH для зміни шляху пошуку.
Так само, команда umask було налаштовано для повної відповідності специфікації POSIX, а функцію printf було покращено новими опціями для багатобайтових рядків та альтернативного представлення символів і рядків.
Сумісність з C23 та прощання з K&R C
Одна з найважливіших структурних змін – це прийняття стандарту C23 у вихідному коді Bash. Як результат, Підтримку компіляції в режимі "K&R C" було видалено., техніка, що сягає корінням у ранні часи мови програмування C.
З іншого боку, Bash 5.3 представляє кілька завантажуваних команд, таких як:
- кв: генерувати асоціативні масиви з даних у форматі ключ-значення.
- час виконання: перетворює дати в текстовому форматі на час Unix.
- fltexpr: дозволяє виконувати арифметичні операції з плаваючою комою, емулюючи поведінку let.
Крім того, Додано динамічну змінну BASH_MONOSECONDSЩо забезпечує монотонний лічильник системного часу, корисний для завдань, де часова стабільність є критично важливою.
У режимі POSIX Bash тепер виконує порівняння рядків за допомогою операторів < та >. з урахуванням регіональних налаштувань. Це також узгоджує поведінку таких команд, як test, trap, wait та bind, чітко дотримуючись вимог стандарту. Наприклад, trap -P дозволяє вивести дію trap кожного сигналу, а wait -n покращує керування завершеними процесами та замінами.
Readline 8.3
Бібліотека Readline, доповнювач Bash, також отримала суттєве оновлення. Серед її найпомітніших нових функцій:
- пошук з ігноруванням регістру: дозволяє пошук без урахування регістру в історії.
- завершення експорту: експортує можливі варіанти завершення слова для зовнішньої обробки.
- виконати-іменовану-команду: Виконує команди, ім'я яких зчитується зі стандартного вводу, що корисно для написання скриптів та налаштування.
- Покращена підтримка макросів, нові налаштовувані змінні та покращена обробка розмірів екрана після відновлення (SIGCONT).
Встановлення та/або оновлення Bash у Linux
Ті, хто зацікавлений у встановленні або оновленні Bash на Linux, повинні знати, що це залежить від дистрибутива, який ви використовуєте. Нижче я поясню, як це зробити на основних дистрибутивах:
На дистрибутивах на базі Debian (таких як Ubuntu, Linux Mint)
sudo apt install --only-upgrade bash
Це оновить Bash до останньої версії, доступної в офіційних репозиторіях.
Якщо ви хочете встановити його з нуля (наприклад, на дуже мінімальну систему):
sudo apt встановити bash
У дистрибутивах на базі Red Hat (таких як Fedora, CentOS, RHEL)
sudo dnf update bash Щоб встановити Bash (якщо його ще немає):
sudo dnf встановити bash
На Arch Linux та похідних (таких як Manjaro)
sudo pacman -Syu bash
Це оновить Bash разом з усією системою. Щоб встановити лише Bash:
sudo pacman -S bash