Scroll to navigation

BASH(1) General Commands Manual BASH(1)

НАЗВА

bash — GNU Bourne-Again SHell

КОРОТКИЙ ОПИС

bash [параметри] [рядок_команди | файл]

АВТОРСЬКІ ПРАВА

Bash is Copyright (C) 1989-2025 by the Free Software Foundation, Inc.

ОПИС

Bash є інтерпретатором мови командного рядка, який виконує команди, прочитані зі стандартного джерела вхідних даних, з рядка або з файла. Це реалізація і розширення оболонки Борна, давнього інтерпретатора мови команд Unix. У Bash також реалізовано корисні можливості оболонок Korn і C (ksh і csh).

POSIX – це назва сімейства комп'ютерних стандартів, заснованих на Unix. Bash створено як сумісну реалізацію частини Shell and Utilities специфікації IEEE POSIX (стандарт IEEE 1003.1). Режим POSIX Bash (далі – режим posix) змінює поведінку оболонки там, де її типова робота відрізняється від стандартної, щоб суворо відповідати стандарту. Див. ДИВ. ТАКОЖ нижче, щоб ознайомитися із довідковим документом, який детально описує, як режим posix впливає на поведінку bash. Bash можна налаштувати на типову сумісність із POSIX

ПАРАМЕТРИ

Усіма односимвольними параметрами оболонки, які документовано в описі вбудованої команди set, зокрема -o, можна скористатися як параметрами під час виклику оболонки. Крім того, під час виклику bash виконує обробку таких параметрів:

Якщо вказано параметр -c, команди буде прочитано з першого аргументу, який не є параметром, рядок_команди. Якщо після аргументу рядок_команди вказано інші аргументи, перший аргумент буде пов'язано із $0, а усі інші аргументи — з наступними позиційними параметрами. Прив'язка до $0 встановлює назву оболонки, яку буде використано у повідомленнях із попередженнями та повідомленнях про помилки.
Якщо вказано параметр -i, оболонка є інтерактивною.
Наказує bash працювати так, наче програму викликано як оболонку для входу до системи (див. ВИКЛИК нижче).
Якщо вказано параметр -r, оболонка стає обмеженою (див. ОБМЕЖЕНА ОБОЛОНКА нижче).
Якщо вказано параметр -s або якщо після обробки параметрів не буде виявлено аргументів, команди буде прочитано зі стандартного джерела вхідних даних. За допомогою цього параметра можна встановлювати позиційні параметри при виклику інтерактивної оболонки або при читанні вхідних даних за допомогою конвеєра команд.
Друкувати входові рядки оболонки під час виконання.
Виводити команди та їхні аргументи при їхньому виконанні.
Список усіх рядків у подвійних лапках, яким передуватиме $, буде виведено до стандартного виведення. Це рядки, які підлягатимуть перекладу, якщо поточною локаллю не є C або POSIX. Неявним чином буде також застосовано параметр -n. Команди оболонки не виконуватимуться.
[-+]O [параметр_оболонки]
параметр_оболонки є одним з параметрів оболонки, який приймає вбудований засіб shopt (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Якщо вказано параметр_оболонки, -O встановлює значення цього параметра; +O скасовує встановлення. Якщо параметр_оболонки не вказано, до стандартного виведення буде виведено назви і значення параметрів оболонки, які приймаються shopt. Якщо параметром виклику є +O, виведення буде показано у форматі, який може бути повторно використано як вхідні дані програми.
--
-- вказує на завершення параметрів і вимикає подальшу обробку параметрів. Будь-які аргументи після -- оброблятимуться як назви файлів скриптів оболонки (див. нижче) та аргументи, які буде передано цьому скрипту. Аргумент - є еквівалентним до --.

Крім того, bash обробляє декілька багатосимвольних параметрів. Ці параметри має бути вказано у командному рядку до односимвольних параметрів, щоб їх було розпізнано.

Налаштовування для профілю засобу діагностики, який слід виконати до запуску оболонки. Вмикає розширений режим діагностики (див. опис параметра extdebug вбудованого засобу shopt нижче).
Еквівалент -D, але виведення відбуватиметься у форматі файлів GNU gettext “po” формат файлів (портативного об'єкта).
Те саме, що і -D.
Вивести повідомлення щодо користування до стандартного виведення і завершити роботу програми зі станом «успіх».
--init-file файл
Execute commands from file instead of the standard personal initialization file ~/.bashrc if the shell is interactive (see INVOCATION below).
Еквівалент -l.
Не використовувати бібліотеку GNU readline для читання рядків команд, якщо оболонка є інтерактивною.
Do not read either the system-wide startup file /etc/profile or any of the personal initialization files ~/.bash_profile, ~/.bash_login, or ~/.profile. By default, bash reads these files when it is invoked as a login shell (see INVOCATION below).
Do not read and execute the personal initialization file ~/.bashrc if the shell is interactive. This option is on by default if the shell is invoked as sh.
Увімкнути режим posix; змінити поведінку bash там, де типові дії відрізняються від стандарту POSIX так, щоб відповідати стандарту
Оболонка стає обмеженою (див. ОБМЕЖЕНА ОБОЛОНКА нижче).
Еквівалент -v.
Вивести дані щодо версії цього екземпляра bash до стандартного виведення і завершити роботу зі станом виходу «успіх».

АРГУМЕНТИ

Якщо після обробки параметрів у рядку команди лишаться аргументи, і не вказано ні параметр -c, ні параметр -s, перший аргумент буде оброблено як назву файла, у якому зберігаються команди оболонки. Якщо bash викликано у такий спосіб, для $0 буде встановлено значення назви цього файла, а решту аргументів буде розподілено між іншими позиційними параметрами послідовно. Bash прочитає і виконає команди із вказаного файла, а потім завершить роботу. Кодом стану виходу bash буде код стану виходу останньої виконаної у скрипті команди. Якщо не буде виконано жодної команди, кодом стану виходу буде 0. Спершу bash виконає спробу відкрити файл у поточному каталозі. Якщо файла із вказаною назвою не буде знайдено, оболонка виконає пошук файла скрипту у каталогах змінної середовища PATH.

ВИКЛИК

A login shell є той, чий перший символ нульового аргументу є -, або той, що починається з параметра --login.

Інтерактивною оболонкою є оболонка, яку запущено без аргументів, які не є аргументами параметрів (якщо не вказано параметр -s), і без параметра -c, чиї стандартні джерело вхідних даних та стандартне виведення помилок з'єднано з терміналами (як це визначено isatty(3)), або оболонка, яку запущено з параметром -i. Якщо bash є інтерактивною, Bash встановлює PS1, а $- включає i, що надає змогу скрипту оболонки або файлу запуску перевіряти відповідний стан.

Нижче наведено опис того, як bash виконує свої файли запуску. Якщо існує якийсь з цих файлів, але його не можна прочитати, bash повідомляє про помилку. Записи з тильдою розгортаються до назв файлів, як це описано нижче у підрозділі Розгортання з тильдою розділу РОЗГОРТАННЯ.

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior. Please note that the file /etc/profile includes an autodetection shell code wether it has to source /etc/bash.bashrc as well as ~/.bashrc.

When an interactive login shell exits, or a non-interactive login shell executes the exit builtin command, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc then ~/.bashrc when those files exist and are readable. The --norc option inhibits this behavior. The --rcfile file option causes bash to use file instead of ~/.bashrc. Please note that the file /etc/bash.bashrc includes an autodetection shell code wether it is used for by a remote OpenSSH SSH client like ssh(1) or slogin(1) to source the local /etc/profile if not already done.

Коли bash запущено неінтерактивно, щоб запустити скрипт оболонки, наприклад, воно шукає змінну BASH_ENV у оточенні, якщо знаходить, то розкриває її значення, і використовує розкрите значення, як назву файлу, який треба прочитати і виконати. Bash поводиться, ніби виконують наступну команду:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

але значення змінної PATH не використовується для пошуку назви файлу.

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, or a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The --noprofile option inhibits this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files.

При виклику за назвою sh, bash входить у режим posix після читання файлів запуску.

Якщо bash запущено у режимі posix або з параметром командного рядка --posix, програма виконуватиме усі настанови стандарту POSIX для файлів запуску. У цьому режимі інтерактивні оболонки розгортатимуть змінну ENV, читатимуть і виконуватимуть команди з файла, назва якого визначається розгорнутим значенням. Читання будь-яких інших файлів запуску не виконуватиметься.

Bash attempts to determine when it is being run with its standard input connected to a network connection, as when executed by the historical and rarely-seen remote shell daemon, usually rshd, or the secure shell daemon sshd. If bash determines it is being run non-interactively in this fashion, it reads and executes commands from /etc/bash.bashrc then ~/.bashrc, when those file exists and is readable. Bash does not read this file if invoked as sh. The --norc option inhibits this behavior, and the --rcfile option makes bash use a different file instead of ~/.bashrc, but neither rshd nor sshd generally invoke the shell with those options or allow them to be specified.

Якщо оболонку запущено із використанням ідентифікатора ефективного користувача (групи) рівного ідентифікатору справжнього користувача (групи), і не вказано параметр -p, програма не читатиме жодних файлів запуску, функції оболонки не успадковуватимуться з середовища, змінні SHELLOPTS, BASHOPTS, CDPATH та GLOBIGNORE, якщо їх використано у середовищі, буде проігноровано, а для ідентифікатора ефективного користувача буде встановлено значення ідентифікатора справжнього користувача. Якщо при виклику буде використано параметр -p, поведінка при запуску буде тією самою, але значення ідентифікатора ефективного користувача не скидатиметься.

ОЗНАЧЕННЯ

У решті цього документа використано наведені нижче визначення.

пропуск
Пробіл або табуляція.
Символ з класу символів space у поточній локалі або символ, для якого isspace(3) повертає істинне значення (true).
слово
Послідовність символів, яка обробляється оболонкою як єдиний модуль. Також відома як жетон.
назва
A слово, що містить лише алфавітно-цифрові символи та підкреслення, та починається з літери або підкреслення. Також, на якого посилаються, як identifier.
метасимвол
Символ, який, якщо не брати його у лапки, відокремлює слова. Таким символом може бути:

| & ; ( ) < > space tab newline

оператор керування
Жетон, який виконує контрольну функцію. Один з таких символів:

|| & && ; ;; ;& ;;& ( ) | |& <newline>

ЗАРЕЗЕРВОВАНІ СЛОВА

Зарезервовані слова — слова, які мають особливе значення для оболонки. Вказані нижче слова буде розпізнано як зарезервовані слова, якщо їх не було нейтралізовано, і якщо вони є першим словом команди (див. ГРАМАТИКА ОБОЛОНКИ нижче), третім словом команди case або select (коректним є лише in) або третім словом команди for (коректними є лише in і do):

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

ГРАМАТИКА ОБОЛОНКИ

У цьому розділі описано синтаксис різних форм команд оболонки.

Прості команди

Простою командою є послідовність надання значень змінним, після якої вказано відокремлені пропусками слова і переспрямування і яка завершується оператором керування. Перше слово визначає команду, яку буде виконано, її буде передано як нульовий аргумент. Решту слів буде передано як аргументи команди, яку викликано.

Повернутим значенням простої команди є її код стану виходу або 128+n, якщо команду було перервано із використанням сигналу n.

Конвеєри

Конвеєр є послідовністю однією або декількох команд, які відокремлено одним із керівних операторів | або |&. Формат конвеєра є таким:

[time [-p]] [ ! ] команда1 [ [||&] команда2 ... ]

Стандартне виведення команди команда1 з'єднується каналом зі стандартним введенням команди команда2. Це з'єднання виконується до будь-яких переспрямувань, які визначено командою (див. ПЕРЕСПРЯМУВАННЯ нижче). Якщо |& є оператором конвеєра, стандартне виведення помилок команди команда1, на додачу до її стандартного виведення, з'єднано зі стандартним введенням команди команда2 каналом; це скорочення від 2>&1 |. Це неявне переспрямовування стандартного виведення помилок до стандартного виведення виконується після будь-яких переспрямувань, які визначаються командою команда1.

Кодом стану повернення конвеєра є код стану виходу останньої команди, якщо не вказано параметр pipefail. Якщо увімкнено pipefail, кодом стану повернення конвеєра є значення останньої (найправішої) команди, яка завершила роботу із ненульовим кодом стану, або нуль, якщо усі команди було виконано успішно. Якщо перед конвеєром вказано зарезервоване слово !, кодом стану виходу конвеєра є логічне заперечення коду стану виходу, який описано вище. Якщо команди у конвеєрі обробки виконуються синхронно, оболонка очікує на завершення виконання усіх команд у конвеєрі, перш ніж повернути значення.

Якщо перед конвеєром вказано зарезервоване слово time, після завершення виконання конвеєра буде виведено звіт щодо часу спожитого під час виконання у просторі користувача і у просторі системи. Параметр -p змінює формат виведення на такий, який визначено POSIX режимі posix, вона не розпізнає time як зарезервоване слово, якщо наступний жетон починається з “-”. Можна встановити для змінної середовища TIMEFORMAT значення рядка форматування, який визначає спосіб показу даних щодо часу; див. опис TIMEFORMAT у розділі Змінні оболонки нижче.

Якщо оболонка перебуває у режимі posix, після time можна використати як єдине слово у простій команді. У цьому випадку оболонка показуватиме загальний час, який спожито у просторах користувача і системи оболонкою та її дочірніми процесами. Змінною TIMEFORMAT задається форматування даних щодо часу.

Кожна команда у багатокомандному конвеєрі, де створено канали, виконується у підоболонці, яка є окремим процес. Див. СЕРЕДОВИЩЕ ВИКОНАННЯ КОМАНД, щоб ознайомитися із описом підоболонок і середовища підкоманд. Якщо використано параметр lastpipe за допомогою вбудованого запису shopt (див. опис shopt нижче), останній елемент конвеєра може бути виконано процесом оболонки, якщо керування завданнями не є активним.

Списки

Список є послідовністю одного або декількох конвеєрів команд, які відокремлено одним з операторів ;, &, && або ||, і, якщо потрібно, завершено одним із символів ;, & або <розривом рядка>.

З цих операторів списку && і || мають однакову пріоритетність. Нижчу за них пріоритетність мають ; і &, які теж мають однакову пріоритетність.

У списку може бути використано послідовність з одного або декількох символів нового рядка замість крапки з комою для відокремлення команд.

Якщо команда завершується оператором керування &, оболонка виконує команду у фоновому режимі у підоболонці. Оболонка не чекатиме на завершення виконання такої команди, кодом стану повернення завжди буде 0. Такі команди будемо називати асинхронними. Команди, які відокремлено символом ;, буде виконано послідовно. Оболонка очікуватиме на виконання кожної команди, перш ніж перейти до наступної. Кодом стану повернення буде код стану повернення останньої виконаної команди.

Списки І та АБО є послідовностями одного або більше каналів розділених керуючими операторами && та || відповідно. Списки І та АБО виконуються з лівою асоціативністю. Список І має форму

команда1 && команда2

команду2 буде виконано лише тоді, якщо команда1 повертає нульовий код стану виходу (успіх).

Список OR має форму

команда1 || команда2

Команду команда2 буде виконано тоді і лише тоді, коли команда команда1 повертає ненульовий код стану виходу. Кодом стану повернення списків AND і OR є код стану виходу останньої виконаної команди у списку.

Складені команди


Складена команда є однією з описаних нижче команд. У більшості випадків список в описі команди може відокремлюватися від решти команди одним або кількома новими рядками, а замість крапки з комою може слідувати новий рядок.

(список)
Список виконується у підоболонки (дивіться СЕРЕДОВИЩЕ ВИКОНАННЯ КОМАНД нижче, де наведено опис середовища підоболонки). Присвоєння змінних і вбудовані команди, які впливають на середовище оболонки, не залишаються в силі після виконання команди. Статус повернення — це стан виходу списку команд список.
{ список; }
список просто виконується в поточному середовищі оболонки. Список повинен завершуватися новим рядком або крапкою з комою. Це називається груповою командою. Стан повернення — це стан виходу списку команд список.
Зверніть увагу, що на відміну від метасимволів ( та ), { та } є зарезервованими словами і має відбуватися там, де дозволено розпізнавати зарезервоване слово. Оскільки вони не викликають розриву слова, вони повинні відділятися від списку команд список пробілами або іншими метасимволами оболонки.
((вираз))
Арифметичний вираз обчислюється згідно правил описаних нижче під АРИФМЕТИЧНІ ОБЧИСЛЕННЯ. Якщо значення виразу не нуль, повертається стан 0; в іншому випадку повертається стан 1. Для аргументу вираз буде виконано такі самі розгортання, які було б виконано, якби його було взято у подвійні лапки, але неекрановані символи подвійних лапок у самому аргументі вираз не буде оброблено особливим чином і буде просто вилучено. Оскільки це може потенційно призвести до порожніх рядків, ця команда вважає це виразами, результатом обчислення яких є 0.
[[ вираз ]]
Обробляє умовний вираз і повертає нульовий стан (true) або ненульовий стан (false). Вирази складаються з первинних частин, описаних нижче у розділі УМОВНІ ВИРАЗИ. Для слів між [[ і ]] не буде виконано поділ на слова та розгортання шляхів. Оболонка виконає розгортання тильди, розширення параметрів і змінних, арифметичне розширення, підставляння команд, підставляння процесу та вилучення лапок для цих слів. Умовні оператори, такі як -f, повинні бути без лапок, щоб бути визнаними основними.
Якщо використано [[, оператори < і > лексикографічно упорядковуватимуться з використанням порядку поточної локалі.
Коли використовуються оператори == і !=, рядок праворуч від оператора вважається взірцем і відповідає правилам, описаним нижче в розділі Відповідність за взірцем, ніби було увімкнено параметр оболонки extglob. Оператор = еквівалентний ==. Якщо увімкнено параметр оболонки nocasematch, пошук збігів виконується без урахування регістру символів алфавіту. Буде повернуто значення 0, якщо рядок відповідає (==) або не відповідає (!=) взірцю, і 1 в іншому випадку. Якщо будь-яку частину взірця взято у лапки, відповідність частину у лапках буде встановлено безпосередньо, без використання будь-якої особливої відповідності взірців.
Доступним є додатковий двійковий оператор, =~, із тим самим рівнем пріоритетності, що і as == and !=. Якщо ним скористатися, рядок праворуч від оператора буде оброблено як розширений формальний вираз POSIX і встановлено відповідність (за допомогою інтерфейсів POSIX regcomp і regexec, які зазвичай описано у regex(3)). Буде повернуто значення 0, якщо рядок збігається із взірцем, і 1 в іншому випадку. Якщо формальний вираз є синтаксично помилковим, повернутим значенням умовного виразу буде 2. Якщо увімкнено параметр оболонки nocasematch, відповідність встановлюватиметься без врахування регістру символів абетки.
Будь-яку частину взірця можна взяти у лапки, якщо відповідність цієї частини рядка слід встановлювати буквально. Це означає, що будь-який символ у нейтралізованій частині буде використано як є, а не з врахуванням відповідності спеціальному взірцю. Якщо взірець зберігається у змінній оболонки, нейтралізація розгортання змінної встановлює режим примусового встановлення відповідності за взірцем як звичайним рядком. Будьте обережними із виразами у квадратних дужках у формальних виразах, оскільки звичайна нейтралізація і символи взірців втрачають значення у квадратних дужках.
Відповідність буде встановлено, якщо взірець відповідає будь-якій частині рядка. Прив'яжіть взірець за допомогою операторів формальних виразів ^ і $, щоб встановити примусову відповідність усьому рядку.
У змінній-масиві BASH_REMATCH зберігається запис частин рядка, які відповідають взірцю. Елемент BASH_REMATCH з індексом 0 частину рядка яка відповідає усьому формальному виразу. Підрядки, які відповідають взятим у дужки підвиразам у формальному виразі, зберігаються у решті індексованих елементів масиву BASH_REMATCH. Елемент BASH_REMATCH із індексом n ж частиною рядка, що відповідає взятому у дужки n-му підвиразу. Bash встановлює BASH_REMATCH у загальній області видимості; оголошення її як локальної змінної призведе до неочікуваних результатів.
Вираз можна поєднувати за допомогою вказаних нижче операторів, які упорядковано за спаданням пріоритетності:
( вираз )
Повертає значення виразу вираз. Цим можна скористатися для перевизначення звичайної пріоритетності операторів.
! вираз
True, якщо вираз має значення false.
вираз1 && вираз2
True, якщо обидва, вираз1 і вираз2, мають значення true.
вираз1 || вираз2
True, якщо вираз1 або вираз2 має значення true.

При використанні операторів && і || значення виразу вираз2 не обчислюватиметься, якщо значення виразу вираз1 достатньо для визначення повернутого значення усього виразу умови.

По-перше, список слів, за яким вказано in, розгортається у список записів. Потім для змінної назва встановлюється значення кожного з елементів списку за чергою, і кожного разу виконується список. Якщо пропущено слово in, команда for виконає список для усіх встановлених позиційних параметрів (див. ПАРАМЕТРИ нижче). Повернутий код стану буде кодом стану виходу останньої виконаної команди. Якщо розгортання записів за in призведе до створення порожнього списку, команди не виконуватимуться, а кодом стану повернення буде 0.
Спочатку, арифметичний вираз вираз1 обчислюється за правилами, описаними нижче у розділі АРИФМЕТИЧНІ ОБЧИСЛЕННЯ. Потім, обчислення арифметичного виразу expr2 повторюється поки не досягне нуля. Кожного разу, коли результатом обчислення виразу вираз2 є нуль, буде виконано список і обчислено арифметичний вираз вираз3. Якщо якогось виразу не буде виявлено, вважатиметься, що його значенням є 1. Повернутим значенням є стан виходу останньої команди список, яку виконано або ненульове значення, якщо будь-який вираз є некоректним.
Для керування виконанням циклу скористайтеся вбудованими командами break і continue (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Спочатку буде розгорнуто список слів після in. Результатом буде список записів. Набір розгорнутих слів буде виведено до стандартного виведення помилок, перед кожним з яких буде дописано номер. Якщо буде пропущено слово після in, буде виведено позиційні параметри (див. ПАРАМЕТРИ нижче). Після цього select буде показано запит PS3 і прочитано рядок зі стандартного введення. Якщо рядок складається з номера, який відповідає одному зі показаних слів, select надасть слову буде надано значення назва. Якщо рядок є порожнім, слова і запит буде показано ще раз. Якщо буде прочитано символ кінця файла (EOF), виконання команди select завершується із поверненням стану 1. Будь-яке інше прочитане значення призведе до того, що параметру назва буде надано порожнє значення (null). Прочитаний рядок буде збережено у змінній REPLY. Список команд список буде виконано після кожного вибору варіанта, аж доки не буде виконано команду break. Станом виходу select є стан виходу останньої команди, яку буде виконано у списку список, або нуль, якщо не буде виконаної жодної команди.
Команда case спочатку розгортає слово і намагається послідовно встановити його відповідність кожному із взірців взірець за допомогою правил встановлення відповідності, які описано у розділі Відповідність за взірцем нижче. Слово слово буде розгорнуто із використанням розгортання тильди, розгортання параметрів і змінних, арифметичних обчислень, заміни команд, підставляння процесів та вилучення лапок. Кожен із інспектованих взірців взірець буде розгорнуто із використанням розгортання тильди, розгортання параметрів і змінних, арифметичних обчислень, заміни команд, підставляння процесів та вилучення екранування. Якщо увімкнено параметр оболонки nocasematch, відповідність встановлюватиметься без врахування регістру символів абетки. Виразом є список взірців і пов'язаний список.
Якщо буде встановлено відповідність, case виконає відповідний список команд список. Якщо буде використано оператор ;;, після першого ж встановлення відповідності взірцю подальші спроби встановлення відповідності не виконуватимуться. Якщо використати ;& замість ;;, виконання продовжуватиметься із прив'язкою списку команд список до наступного набору взірців. Якщо використати ;;& замість ;;, оболонка виконає перевірку наступного списку взірців в інструкції, якщо такий є, і виконає будь-який пов'язаний із нею список команд список, якщо буде встановлено відповідність, продовжуючи виконання інструкцій варіанта так, наче не було встановлено відповідності списку взірців. Станом виходу є нуль, якщо жоден із взірців не є відповідним.
В іншому випадку, це стан завершення останньої виконаної команди в останньому виконаному списку.
if список виконується. Якщо стан виходу дорівнює нулю — виконується then список. В іншому випадку по черзі виконується кожен elif список, якщо їхній стан виходу дорівнює нулю, то виконується відповідний then список і команда завершується. Інакше виконується else список, якщо наявний. Станом виходу є стан виходу останньої виконаної команди або нуль, якщо умова не перевірялася.
Команда while послідовно виконує список команд список-2, доки остання команда у списку команд список-1 повертає нульовий стан виходу. Команда until є аналогічною до команди while, але умова у ній є оберненою: список команд список-2 виконуватиметься, доки остання команда у списку команд список-1 не поверне ненульовий стан виходу. Станом виходу команд while і until є стан виходу останньої виконаної команди у списку команд список-2 або нуль, якщо не було виконано жодної команди.

Копроцеси

Копроцес — команда оболонки, перед якою вказано зарезервоване слово coproc. Виконання копроцесу відбувається асинхронно у підоболонці так, наче команду було завершено керівним оператором &. При цьому, буде встановлено двобічний канал обміну даними між оболонкою, у якій виконується копроцес, і копроцесом.

Синтаксис для копроцесу:

coproc [НАЗВА] команда [переспрямування]

Створює копроцес із назвою НАЗВА. Аргументом команда може бути або проста команда, або складена команда (див. вище). Аргументом НАЗВА є назва змінної середовища. Якщо аргументу НАЗВА не вказано, типовою назвою є COPROC.

Рекомендована форма використання копроцесу:

coproc НАЗВА { команда [переспрямування]; }

Ця форма є бажаною, оскільки прості команди призводять до обов'язкового іменування копроцесу назвою COPROC, і нею простіше користуватися, вона є повнішою за інші складені команди.

Якщо команда є складеною командою, НАЗВА є необов'язковою. Слово після coproc визначає, чи буде слово оброблено як назву змінної: його буде оброблено як запис НАЗВА, якщо це не є зарезервованим словом, яке впроваджує складену команду. Якщо аргумент команда є простою командою, використовувати аргумент НАЗВА не можна; так зроблено, щоб уникнути плутанини між аргументом НАЗВА і першим словом простої команди.

При виконанні копроцесу оболонка створює змінну-масив (див. Масиви нижче) із назвою НАЗВА у контексті оболонки, з якої відбувається виконання. Стандартне виведення команди команда буде з'єднано за допомогою каналу обміну даними із дескриптором файла в оболонці, з якої відбувається виконання, і значення цього дескриптора файла буде надано елементу НАЗВА[0]. Стандартне джерело вхідних даних команди команда буде з'єднано за допомогою каналу із дескриптором файла у оболонці, з якої відбувається виконання, а значення цього дескриптора файла буде надано елементу НАЗВА[1]. Канал обміну даними буде встановлено до виконання будь-яких переспрямувань, які вказано командою (див. ПЕРЕСПРЯМУВАННЯ нижче). Дескрипторами файлів можна скористатися як аргументами команд оболонки з використанням стандартного розгортання слів. Підоболонки не матимуть доступу до дескрипторів файлів, окрім дескрипторів, які створено для виконання команд та підставляння процесів.

Доступ до ідентифікатора процесу оболонки, яку викликано для виконання копроцесу, можна отримати як значення змінної НАЗВА_PID. Для очікування на завершення копроцесу можна скористатися вбудованою командою wait.

Оскільки копроцеси створюються як асинхронні команди, команда coproc завжди повертає успіх. Стан вертання копроцесу є станом виходу команди.

Визначення функцій оболонки

Функція оболонки це обʼєкт, що викликається як проста команда і виконує складену команду з новим набором позиційних параметрів. Функція оболонки оголошується наступним чином:

Ця команда визначає функцію із назвою назва_функції. Використання зарезервованого слова function є необов'язковим. Якщо вказано зарезервоване слово function, круглі дужки є необов'язковими. Вмістом функції є складена команда складена_команда (див. Складені команди вище). Ця команда, зазвичай, є списком команд між { і }, але може бути будь-якою командою з наведеного вище списку складених команд, якщо використано зарезервоване слово function, але круглі дужки не вказано, рекомендуємо використовувати фігурні дужки. Складену команду складена_команда буде викликано кожного разу, коли як назву простої команди використано назва_функції. У режимі posix назвв_функції має бути коректною назвою оболонки і не може збігатися із назвою однієї із спеціальних вбудованих команд POSIX функції може бути будь-яке слово оболонки, що не містить лапок та символу

Будь-які переспрямовування (див. ПЕРЕСПРЯМОВУВАННЯ нижче), вказані під час визначення функції, виконуються під час виконання функції.

Станом виходу визначення функції є нуль, якщо не буде виявлено синтаксичних помилок або призначеної лише для читання функції із тією самою назвою. При виконанні станом виходу функції є стан виходу останньої виконаної команди у її вмісті. (Див. ФУНКЦІЇ нижче.)

КОМЕНТАРІ

У неінтерактивній оболонці або у інтерактивній оболонці, у якій вбудованій команді shopt передано аргумент interactive_comments (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), якщо почати слово #, буде вставлено коментар. Слово починається на початку рядка, після пробілу без лапок або після оператора. Коментар спричиняє ігнорування решти символів у відповідному рядку. У інтерактивній оболонці без параметра interactive_comments можливості додавання коментарів не передбачено. Параметр interactive_comments у інтерактивних оболонках типово увімкнено.

НЕЙТРАЛІЗАЦІЯ

Нейтралізацію використовують для усування спеціального призначення певних символів або слів у командній оболонці. Нейтралізацією можна скористатися для вимикання обробки спеціальних символів, для запобігання непотрібному розпізнаванню зарезервованих слів та для запобігання розгортанню параметрів.

Усі метасимволи з наведено у розділі ВИЗНАЧЕННЯ списку мають особливе значення для оболонки — їх слід нейтралізувати, якщо вони мають бути просто буквальними словами.

Якщо використано можливості доповнення за журналом команд (див. ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче), символ доповнення за журналом, зазвичай !, слід нейтралізувати для запобігання доповненню.

Передбачено чотири механізми нейтралізації: символ екранування, одинарні лапки, подвійні лапки і комбінації долара із одинарними лапками.

Символ зворотної похилої риски без лапок (\) є символом екранування. Він зберігає буквальне значення наступного за ним символу з вилученням будь-якого спеціального призначення, окрім символу <нового рядка>. Якщо буде виявлено пару \<новий рядок> і зворотну похилу риску не нейтралізовано символ \<новий рядок> буде оброблено як продовження рядка (тобто, його буде вилучено з потоку вхідних даних і, фактично, проігноровано).

Набір символів у одинарних лапках зберігає своє буквальне значення для кожного з символів у лапках. У межах взятого в одинарні лапки тексту не можна використовувати одинарні лапки, навіть якщо їх екрановано символом зворотної похилої риски.

Набір символів, взятий у подвійні лапки, зберігає буквальне значення для усіх символів у лапках, окрім символів $, `, \ і, якщо увімкнено доповнення за журналом, !. Якщо оболонка працює у режимі posix, ! не має особливого призначення у подвійних лапках, навіть якщо увімкнено доповнення за журналом. Символи $ і ` зберігають своє спеціальне значення у подвійних лапках. Символ зворотної похилої риски зберігає своє спеціальне значення, лише якщо за ним вказано один з таких символів: $, `, ", \ або <новий рядок>. Зворотні похилі риски, що передують символам без спеціального призначення, замінено не буде.

Символ подвійних лапок можна екранувати у взятому у подвійні лапки фрагменті додаванням перед ним символу зворотної похилої риски. Якщо увімкнено доповнення за журналом, його буде виконано для !, якщо цей символ не екрановано символом зворотної похилої риски. Символ зворотної похилої риски перед ! не буде вилучено.

Спеціальні параметри * і @ зберігають спеціальне значення і у подвійних лапках (див. ПАРАМЕТРИ нижче).

Послідовності символів у формі $'рядок' оброблятимуться особливим чином, як особливий варіант одинарних лапок. Ці послідовності буде розгорнуто до рядка рядок, а екрановані символом зворотної похилої риски символи у рядку рядок буде замінено так, як це визначено стандартом ANSI C. Екрановані символом зворотної похилої риски послідовності, якщо такі буде виявлено, буде декодовано так:

гудок (дзвінок)
backspace
символ скасування
подавання бланку
новий рядок
повернення каретки
горизонтальна табуляція
вертикальна табуляція
\\
зворотна похила
\'
одинарна лапка
\"
подвійна лапка
\?
знак питання
Восьмибітовий символ, значенням якого є вісімкове значення nnn (від однієї до трьох вісімкових цифр).
Восьмибітовий символ, значенням якого є шістнадцяткове значення HH (від однієї до двох шістнадцяткових цифр).
Символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHH (від однієї до чотирьох шістнадцяткових цифр).
Символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHHHHHH (від однієї до восьми шістнадцяткових цифр).
Символ control-x.

Розгорнутий результат буде виразом в одинарних лапках, так, наче символу долара не було.

Переклад рядків

Взяття рядка у подвійні лапки, перед якими вказано символ долара ($"рядок") призведе до того, що рядок буде перекладено відповідно до поточної локалі. Пошук і переклад повідомлень буде виконано інфраструктурою gettext з використанням змінних оболонки LC_MESSAGES та TEXTDOMAIN. Якщо поточною локаллю є C або POSIX, якщо немає доступних перекладів або якщо рядок не перекладено, символ долара буде проігноровано, а рядок буде оброблено як рядок у подвійних лапках, як це описано вище. Це форма екранування подвійними лапками, отже рядок типово лишатиметься взятим у подвійні лапки, є він перекладеним або заміненим чи ні. Якщо увімкнено параметр noexpand_translation за допомогою вбудованої команди shopt, перекладені рядки буде взято в одинарні лапки, замість подвійних. Див. опис shopt нижче у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ.

ПАРАМЕТРИ

Параметром є запис, який зберігає значення. Це може бути назва, число або один із спеціальних символів, список яких наведено нижче у розділі Спеціальні параметри. Змінною будемо називати параметр, який позначено назвою. Змінна має значення і нуль, один або декілька атрибутів. Атрибути призначаються за допомогою вбудованої команди declare (див. declare нижче у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ). Вбудовані команди export і readonly призначають специфічні атрибути.

Параметр встановлено, якщо йому надано значення. Коректним значенням є порожній рядок. Щойно змінну встановлено, встановлення можна скасувати лише за допомогою вбудованої команди unset (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Змінній надається значення за допомогою інструкції у формі

назва=[значення]

Якщо значення не задано, змінній буде надано значення порожнього рядка. У всіх значеннях буде виконано розгортання тильди, розгортання параметрів та змінних, заміни команд, арифметичні обчислення та вилучення лапок (див. РОЗГОРТАННЯ нижче). Якщо для змінної встановлено атрибут integer, значення буде обчислено як арифметичний вираз, навіть якщо не використано розгортання $((...)) (див. Арифметичні обчислення нижче). Поділ на слова та розгортання шляхів до файлів не виконуватимуться. Інструкції визначення значень також можуть бути аргументами вбудованих команд alias, declare, typeset, export, readonly та local (команди оголошення). У режимі posix ці вбудовані команди можуть з'являтися у команді після одного або декількох екземплярів вбудованих команд команда і зберігати ці властивості інструкції встановлення значення.

У контексті надання оператором значення змінній оболонки або індексу масиву оператор “+=” додає значення до попереднього значення змінної. Це стосується і аргументів команд оголошення, зокрема declare, які приймають інструкції надання значень. Коли “+=” застосовується до змінної, для якої встановлено атрибут integer, поточне значення змінної та значення буде обчислено як арифметичні вирази, а змінній буде надано значення суми результатів. Поточне значення зазвичай є сталим цілим числом, але може бути виразом. Якщо “+=” застосовується до змінної-масиву за допомогою складеного надання значень (див. Arrays нижче), значення змінної не скидається (як це відбувається під час використання “=”), а нові значення додаються до масиву, починаючи зі значення, на одиницю більше за максимальний індекс масиву (для індексованих масивів), або додаються як додаткові пари ключ-значення в асоціативному масиві. При застосуванні до змінної, що має значення рядка, значення розгортається та додається до значення змінної.

Змінній можна встановити атрибут nameref за допомогою параметра -n вбудованих команд declare і local (див. опис команд declare і local нижче) для створення nameref або посилання на іншу змінну. У такий спосіб можна працювати зі змінними опосередковано. Кожного разу при посиланні на змінну nameref, встановленні її значення, скасуванні встановлення значення або внесенні змін до атрибутів (окрім використання та зміни самого атрибуту nameref) дію буде виконано зі змінною, назвою якої є значення змінної nameref. Типовим використанням nameref у функціях оболонки є посилання на змінну, чия назва передається як аргумент функції. Наприклад, якщо назву змінної передано до функції оболонки як її перший аргумент, виконання

declare -n ref=$1

у межах функції створює локальну змінну nameref ref, чиїм значенням є назва змінної, яку передано як перший аргумент. Посилання і встановлення значень, а також зміну її атрибутів буде оброблено як посилання, встановлення значень та внесення змін до атрибутів змінної, чию назву було передано як $1. Якщо керівна змінна у циклі for має атрибут nameref, при виконанні циклу список слів може бути списком змінних оболонки, а посилання на назву буде встановлено для кожного слова у списку за чергою. Змінним-масивам не можна надавати атрибут nameref. Втім змінні nameref можу посилатися на змінні-масиви і підписані змінні-масиви. Можна скасовувати значення записів nameref за допомогою параметра -n вбудованої команди unset. Якщо не додати такий параметр, при виконанні unset із аргументом назви змінної nameref буде скасовано встановлення назви для змінної, на яку посилається змінна nameref.

Під час запуску оболонка зчитує своє середовище та створює змінну оболонки з кожної змінної середовища, яка має коректну назву, як описано нижче (див. СЕРЕДОВИЩЕ).

Позиційні параметри

Позиційний параметр — параметр, який позначено однією або декількома цифрами, окрім одинарної цифри 0. Значення позиційних параметрів встановлюються з аргументів оболонки при її виклику. Змінити значення параметрів можна за допомогою вбудованої команди set. Встановлювати значення позиційних параметрів не можна за допомогою звичайних інструкцій встановлення значень. Позиційні параметри тимчасово замінюються при виклику функції оболонки (див. ФУНКЦІЇ нижче).

Для розгортання позиційних параметрів, які складаються з декількох цифр, їх слід вказувати у фігурних дужках (див. РОЗГОРТАННЯ нижче). Без фігурних дужок цифра після символу $ може посилатися лише на один із перших дев'яти позиційних параметрів ($1-$9) або на спеціальний параметр $0 (див. наступний розділ).

Спеціальні параметри

Деякі з параметрів оболонка обробляє в особливий спосіб. На ці параметри можна лише посилатися. Встановлення їхнього значення у звичайний спосіб заборонено. Спеціальні параметри позначаються одним із наступних символів.

*
($*) Розгортається у позиційні параметри, починаючи з першого. Якщо розгорнутий текст не перебуває у подвійних лапках, кожен позиційний параметр розгортатиметься в окреме слово. У контексті, де виконується розгортання слів, ці слова підлягають подальшому поділу на слова і розгортанню назв шляхів. Якщо розгортання відбувається у подвійних лапках, воно відбуватиметься до одного слова, що складатиметься зі значень усіх параметрів, які буде відокремлено першим символом змінної IFS. Тобто, "$*" еквівалентне до "$1c$2c...", де c — перший символ значення змінної IFS. Якщо значення змінної IFS не встановлено, параметри буде відокремлено пробілами. Якщо значення IFS є порожнім, параметри буде з'єднано без проміжних роздільників.
@
($@) Розгортається у позиційні параметри, починаючи з першого. У контекстах, де виконується поділ на слова кожен позиційний параметр буде розгорнуто до окремого слова. Якщо розгортання відбувається не у подвійних лапках, ці слова також буде поділено на окремі слова. У контекстах, де не виконується поділу на слова, зокрема у частині значення інструкції з надання значення, розгортання відбувається до одного слова, у якому позиційні параметри буде відокремлено пробілом. Якщо розгортання відбувається у подвійних лапках і виконується поділ на слова, кожен параметр розгорається до окремого слова. Тобто, "$@" є еквівалентом "$1" "$2" ... Якщо розгортання у подвійних лапках відбувається у межах слова, результат розгортання першого параметра об'єднується із розгортанням початкової частини початкового слова, а результат розгортання останнього параметра об'єднується із розгортанням останньої частини початкового слова. Якщо позиційних параметрів немає, "$@" і $@ ні до чого не розгортаються (тобто, їх буде вилучено).
#
($#) Розгортається до числа позиційний параметрів у десятковому записі.
?
($?) Розгортається до коду стану виходу останнього виконаного конвеєра переднього плану.
-
($-) Розкриває прапорці поточних опцій, що вказані при виклику, через вбудовану команду set, або встановлені самою оболонкою (як опція -i).
$
($$) Розкриває ідентифікатор процесу оболонки. В підоболонці воно розкриває до ідентифікатора процесу батьківської оболонки, а не підоболонки.
!
($!) Розкриває ІД процесу завдання, що було покладено у фон останнім, або викликане асинхронною командою або черед вбудоване bg (див. JOB CONTROL нижче).
0
($0) Розкриває назву оболонки або скрипту оболонки. Воно встановлене під час ініціалізації оболонки. Якщо bash викликано файлом команд, $0 встановлюється в назву того файлу. Якщо bash запущено з опцією -c, тоді $0 встановлюється в перший аргумент після рядка для виконання, якщо він присутній. Інакше, воно встановлюється в назву файлу, якого використали для запуску bash, як надано нульовим аргументом.

Змінні оболонки

Оболонка встановлює значення таких змінних:

_
($_, підкреслення) Має декілька значень, залежно від контексту. Під час запуску оболонки _ отримує значення шляху, який використано для виклику оболонки або назви скрипту, який виконується, у тому вигляді, у якому його передано у середовищі, або списку аргументів. Далі, після розгортання, розгортається до останнього аргументу попередньої простої команди, яку виконано в основному режимі. Також отримує значення повного шляху, який використано для виклику кожної виконаної команди, і записується до середовища, яке експортовано для цієї команди. При перевірці пошти $_ розгортається до назви поштового файла, перевірку якого виконує програма.
Розгортається до повної назви файла, використано для виклику цього екземпляра bash.
Список відокремлених двокрапками увімкнених параметрів оболонки. Кожне слово у списку є коректним аргументом параметра -s вбудованої команди shopt (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Параметри, які з'являються у списку BASHOPTS, є тими параметрами, про які shopt звітує, як про увімкнені. Якщо у середовищі є ця змінна, при запуску bash кожен параметр оболонки у списку буде увімкнено до читання будь-яких файлів запуску. Якщо цю змінну буде експортовано, у дочірніх оболонка буде увімкнено кожен з параметрів у списку. Цю змінну призначено лише для читання.
Розгортається до ідентифікатора поточного процесу bash. Це значення, за певних обставин, зокрема підоболонок, які не потребують повторної ініціалізації bash, відрізняється від $$. Спроба встановлення значення BASHPID ні на що не вплине. Якщо скасувати встановлення BASHPID, змінна втрачає свої особливі властивості, навіть якщо згодом значення буде повторно встановлено.
Змінна-асоціативний масив, елементи якого відповідають внутрішньому списку псевдонімів, який підтримується вбудованим засобом alias. Елементи, додані до цього масиву, відображаються в списку псевдонімів; однак скасування елементів масиву наразі не вилучає псевдоніми зі списку псевдонімів. Якщо скасувати встановлення BASH_ALIASES, змінна втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
Змінна-масив, значеннями якої є кількості параметрів у кожному кадрі поточного стека викликів виконання bash. Кількість параметрів поточної підпрограми (функції оболонки або сценарію, що виконується за допомогою . або source) міститься на вершині стека. Коли виконується підпрограма, кількість переданих параметрів передається в BASH_ARGC. Оболонка встановлює BASH_ARGC лише в режимі розширеного налагодження (див. нижче опис параметра extdebug вбудованого засобу shopt). Встановлення extdebug після того, як оболонка почала виконувати сценарій, або посилання на цю змінну, коли extdebug не встановлено, може призвести до невідповідних значень. Встановлення значення BASH_ARGC ні на що не вплине; крім того, встановлення значення змінної не можна скасувати.
Змінна-масив, яка містить всі параметрів у поточному стеку викликів виконання bash. Останній параметр останнього виклику підпрограми міститься на вершині стека; перший параметр початкового виклику - внизу. Коли виконується підпрограма, надані параметри передаються в BASH_ARGV. Оболонка встановлює BASH_ARGV лише в режимі розширеного налагодження (див. нижче опис параметра extdebug вбудованого засобу shopt). Встановлення extdebug після того, як оболонка почала виконувати сценарій, або посилання на цю змінну, коли extdebug не встановлено, може призвести до невідповідних значень. Встановлення значення BASH_ARGV ні на що не впливає, і встановлення значення цієї змінної не можна скасувати.
При посиланні ця змінна розширюється до назви оболонки або сценарію оболонки (ідентичне $0; див. опис спеціальних параметрів 0 вище). Встановлення значення BASH_ARGV0 встановлює для $0 те саме значення. Якщо скасувати встановлення BASH_ARGV0, вона втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
Змінна-асоціативний масив, елементи якого відповідають внутрішній геш-таблиці команд, якe підтримує вбудований засіб hash. Елементи, додані до цього масиву, з'являються в геш-таблиці; однак скасування елементів масиву наразі не призводить до видалення назв команд із геш-таблиці. Якщо скасувати встановлення BASH_CMDS, змінна втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
Розгортає команду, яка зараз виконується або має виконуватись, якщо оболонка не виконує команду в результаті пастки, і в цьому випадку це команда, яка виконується під час пастки. Якщо скасувати встановлення BASH_COMMAND, змінна втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
Аргумент команди до параметра виклику -c.
Змінна-масив, чиї елементи є номерами рядків у файлах початкового коду, де викликано кожен відповідний елемент FUNCNAME. ${BASH_LINENO[$i]} є номером рядка у файлі початкового коду (${BASH_SOURCE[$i+1]}), де було викликано ${FUNCNAME[$i]} (або ${BASH_LINENO[$i-1]}, якщо на нього посилаються у іншій функції оболонки). Для отримання номера поточного рядка скористайтеся LINENO. Встановлення значення BASH_LINENO ні на що не впливає, а встановлення значення не може бути скасовано.
Список відокремлених двокрапками каталогів, у яких оболонка буде шукати динамічно завантажувані вбудовані команди, які вказано командою enable.
Кожне посилання на цей параметр буде розгорнуто до значення, яке повертає монотонний годинник системи, якщо такий доступний. Якщо значення BASH_MONOSECONDS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Змінна-масив, чиїм елементам надають значення за допомогою двійкового оператора =~ у команді умови [[. Елемент із індексом 0 є частиною рядка, яка точно відповідає усьому формальному виразу. Елемент із індексом n є частиною рядка, яка відповідає n-ій взятій у круглі дужки частині виразу.
Змінна-масив, чиїми елементами є назви файлів початкового коду, де визначено відповідні назви функцій оболонки у змінній-масиві FUNCNAME. Функцію оболонки ${FUNCNAME[$i]} визначають у файлі ${BASH_SOURCE[$i]} і викликають з ${BASH_SOURCE[$i+1]}. Встановлення значення BASH_SOURCE ні на що не впливає, а встановлення значення не може бути скасовано.
Збільшується на одиницю із кожним переходом до наступної підоболонки або середовища підоболонки, якщо оболонку запускають у цьому середовищі. Початковим значенням є 0. Якщо не встановлено значення BASH_SUBSHELL, втрачає свої особливі властивості, навіть якщо згодом значення буде встановлено.
Встановлює номер сигналу, що відповідає дії перехоплення, що виконується під час її виконання. Див. опис trap у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче, щоб отримати відомості про номери сигналів та виконання перехоплень.
Призначена лише для читання змінна-масив, чиїми елементами є дані щодо версії поточного екземпляра bash. Елементи масиву мають такі значення:

Номер основної версії (випуск).
Номер проміжної версії (версія).
Рівень латки.
Версія збірки.
Стан випуску (наприклад, beta).
Значення MACHTYPE.
Розгортається до рядка, який описує версію цього екземпляра bash (приклад: 5.2.37(3)-release).
Індекс у ${COMP_WORDS} слова, на якому перебуває курсор. Доступ до цієї змінної можна отримати лише у функціях оболонки, які викликають можливості програмованого доповнення тексту (див. Програмоване доповнення нижче).
Клавіша (або остання клавіша послідовності клавіш), яку буде використано для виклику поточної функції доповнення. Ця змінна доступна лише у функціях оболонки та зовнішніх командах, які викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче).
Поточний рядок команди. Ця змінна доступна лише у функціях оболонки та зовнішніх командах, які викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче).
Індекс поточної позиції курсора відносно початку поточної команди. Якщо поточною позицією курсора є кінець поточної команди, значення цієї змінної дорівнює ${#COMP_LINE}. Ця змінна доступна лише у функціях оболонки та зовнішніх командах, які викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче).
Встановлюють ціле значення, яке відповідає типу доповнення, яке призвело до виклику функції доповнення: TAB — звичайне доповнення, ? — доповнення за списком після послідовного натискання клавіші табуляції, ! — доповнення за списком варіантів при доповненні за частиною слова, @ — доповнення за списком, якщо слово лишається незмінним, або % — доповнення за меню. Ця змінна є доступною, лише у функціях оболонки і зовнішніх командах, які викликають можливості програмованого доповнення (див. Програмоване доповнення нижче).
Набір символів, які бібліотека readline обробляє як роздільники слів при виконанні доповнення слів. Якщо не встановлено значення COMP_WORDBREAKS, втрачає свої особливі властивості, навіть якщо значення цієї змінної буде надалі встановлено повторно.
Змінна-масив (див. Масиви нижче), що складається з окремих слів у поточному рядку команди. Рядок буде поділено на слова так, як його ділить readline, з використанням COMP_WORDBREAKS, як це описано вище. Ця змінна доступна лише у функціях оболонки, які викликають можливості програмованого доповнення (див. Програмоване доповнення нижче).
Змінна-масив (див. Масиви нижче), яку створено для зберігання дескрипторів файлів для виведення та введення даних для копроцесу без назви (див. Копроцеси вище).
Змінна-масив (див. Масиви нижче), яка містить поточний вміст стосу каталогів. Каталоги буде розташовано у стосі у тому ж порядку, що і у списку, показаному вбудованою командою dirs. Встановленням значення для елементів цього масиву можна скористатися для внесення змін до записів каталогів у стосі, але додавання та вилучення каталогів слід користуватися вбудованими командами pushd і popd. Встановлення значення цієї змінної не змінюватиме поточного каталогу. Якщо значення DIRSTACK не встановлено, змінна втрачає свої особливі властивості, навіть якщо значення згодом буде встановлено.
Кожне посилання на цей параметр буде розгорнуто до кількості секунд з моменту початку епохи Unix (див. time(3)) у форматі з рухомою крапкою і точністю до мікросекунд. Спроби встановити значення для EPOCHREALTIME буде проігноровано. Якщо значення EPOCHREALTIME не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Кожне посилання на цей параметр буде розгорнуто до кількості секунд з моменту початку епохи Unix (див time(3)). Спроби встановити значення для EPOCHSECONDS буде проігноровано. Якщо значення EPOCHSECONDS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Розгортається до ідентифікатора ефективного користувача поточного користувача. Ініціалізується під час запуску оболонки. Цю змінну призначено лише для читання.
Змінна-масив, яка містить назви усіх функцій оболонки у поточному стеку викликів. Елемент із індексом 0 є назвою будь-якої функції оболонки, яка виконується у поточний момент. Найнижчим елементом у списку (елементом із найбільшим індексом) є “main”. Ця змінна існує лише тоді, коли виконується функція оболонки. Спроби встановити значення FUNCNAME буде проігноровано. Якщо значення FUNCNAME не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Цією змінною можна скористатися у поєднанні із BASH_LINENO та BASH_SOURCE. У кожного елемента %FUNCNAME є відповідні елементи у BASH_LINENO та BASH_SOURCE для опису стека викликів. Наприклад, ${FUNCNAME[$i]} було викликано з файла ${BASH_SOURCE[$i+1]} у рядку з номером ${BASH_LINENO[$i]}. На основі цієї інформації показує дані щодо поточного стекла викликів вбудована команда caller.
Змінна-масив, яка містить список груп, учасником яких є поточний користувач. Спроби встановити значення GROUPS буде проігноровано. Якщо значення GROUPS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Номер у журналі або індекс у списку журналу поточної команди. Спроби встановити значення HISTCMD буде проігноровано. Якщо значення HISTCMD не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Автоматично заповнюється назвою поточного вузла.
Автоматично встановлюється значення рядка, який унікальним чином описує тип комп'ютера, на якому запущено bash. Типове значення залежить від системи.
Кожне посилання на цей параметр буде замінено на десяткове число, яке відповідає поточному послідовному номеру рядка (відлік починається з 1) у скрипті або функції. Якщо параметр використано не у скрипті або функції, підставлене значення може бути беззмістовним. Якщо значення LINENO не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Автоматично встановлюється значення рядка, який повністю описує тип операційної системи, у якій запущено bash у форматі, який визначено стандартом GNU процесор-компанія-система. Типове значення залежить від системи.
Змінна-масив (див Масиви нижче), яку створено для зберігання тексту, який прочитано за допомогою вбудованої команди mapfile, яку виконано без визначення назви змінної.
Попередній робочий каталог, який було встановлено командою cd.
Значення останнього аргументу параметра, яке оброблено вбудованою командою getopts (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Індекс наступного аргументу параметра, який буде оброблено вбудованою командою getopts (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Автоматично встановлюється значення рядка, який описує операційну систему, у якій запущено bash. Типове значення залежить від системи.
Змінна-масив (див. Arrays нижче), що містить список значень стану виходу з команд у останньому виконаному конвеєрі переднього плану, який може складатися з однієї простої команди (див. ГРАМАТИКА ОБОЛОНКИ вище). Bash встановлює значення для PIPESTATUS після виконання багатоелементних конвеєрів, конвеєрів з обмеженим часом та запереченим конвеєром, простих команд, підоболонок, створених за допомогою оператора ( , складених команд [[ та (( , а також після помилок, які призводять до переривання виконання команди оболонкою.
Ідентифікатор процесу батьківського процесу оболонки. Цю змінну призначено лише для читання.
Поточний робочий каталог, який було встановлено командою cd.
Кожен раз, коли використовується цей параметр, програма розгортає його до випадкового цілого числа у межах від 0 до 32767. Наданням RANDOM значення можна ініціалізувати послідовність псевдовипадкових чисел. Використання однакової основи випадковості у генераторі випадкових чисел створює ту саму послідовність значень. Якщо значення RANDOM не встановлено, змінна втрачає особливі властивості, навіть якщо її значення згодом буде встановлено повторно.
Будь-який числовий аргумент, наданий команді readline, який було визначено за допомогою “bind -x” (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), коли її було викликано.
Вміст буфера рядків readline для використання з “bind -x” (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Позиція позначки (збереженої точки вставлення) у буфері рядків readline для використання з “bind -x” (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Символи між точкою вставлення та позначкою часто називають областю.
Позиція точки вставлення у буфері рядків readline для використання з “bind -x” (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Встановлюється значення рядка вхідних даних, який прочитано командою read, якщо цій команді не передано жодних аргументів.
Кожен запис цього параметра буде замінено на кількість секунд, які минули із моменту виклику оболонки. Якщо інструкцією буде встановлено значення SECONDS, значення яким буде замінено наступні записи параметра визначатиметься як кількість секунд, які минули з моменту встановлення значення разом із встановленим значенням. Кількість секунд з моменту виклику оболонки та поточний час завжди визначатиметься за допомогою запитів до годинника системи з точністю у секунду. Якщо значення SECONDS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
Список відокремлених двокрапками увімкнених параметрів оболонки. Кожне слово у списку є коректним аргументом параметра -o вбудованої команди set (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Параметри, які з'являються у списку SHELLOPTS, є тими параметрами, про які set -o звітує, як про увімкнені. Якщо у середовищі є ця змінна, при запуску bash кожен параметр оболонки у списку буде увімкнено до читання будь-яких файлів запуску. Якщо цю змінну буде експортовано, дочірні оболонки вмикатимуть кожен параметр у списку. Цю змінну призначено лише для читання.
Збільшується на одиницю кожного разу, коли запускається екземпляр bash.
Each time it is referenced, this variable expands to a 32-bit pseudo-random number. The random number generator is not linear on systems that support /dev/urandom or arc4random(3), so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to this variable have no effect. If SRANDOM is unset, it loses its special properties, even if it is subsequently reset.
Розгортається до ідентифікатора поточного користувача. Ініціалізується під час запуску оболонки. Цю змінну призначено лише для читання.

Оболонка використовує описані нижче змінні. У деяких випадках bash призначає типове значення змінної. Нижче для таких випадків наведено нотатки.

Значення використовують для встановлення рівня сумісності оболонки. Опис різних рівнів сумісності та їхнього впливу на роботу оболонки наведено у розділі РЕЖИМ СУМІСНОСТІ ОБОЛОНКИ. Значення може бути десятковий дріб (наприклад, 4.2) або ціле число (наприклад, 42), яке відповідає бажаному рівню сумісності. Якщо значення BASH_COMPAT не встановлено або встановлено значення порожнього рядка, рівень сумісності буде типовим для поточної версії програми. Якщо для BASH_COMPAT встановлено значення, яке не є коректним значенням рівня сумісності, оболонка виведе повідомлення про помилку і встановить рівень сумісності, який є типовим для поточної версії оболонки. Підмножину коректних рівнів сумісності описано нижче у розділі BРЕЖИМ СУМІСНОСТІ ОБОЛОНКИ. Наприклад, 4.2 і 42 є коректними значеннями, які відповідають параметру compat42 команди shopt і встановлюють рівень сумісності 42. Коректним значенням також є номер поточної версії оболонки.
Якщо встановлено значення цього параметра, коли bash виконує скрипт оболонки, це розгорнуте значення буде оброблено як назву файла, який містить команди для ініціалізації оболонки, до того, як прочитає і виконає команди зі скрипту. Значення BASH_ENV буде оброблено із розгортанням параметрів, заміною команд та арифметичними обчисленнями, перш ніж його буде використано як назву файла. Для пошуку потрібного файла не буде використано змінну PATH.
Якщо встановлено значення цілого числа, яке відповідає коректному дескриптору файла, bash запише створені під час виконання дані трасування, якщо увімкнено “set -x” для цього дескриптора файла, замість стандартного запису помилок. Дескриптор файла буде закрито у відповідь на скасування встановлення значення BASH_XTRACEFD або встановлення нового значення для цієї змінної. Якщо значення BASH_XTRACEFD не встановлено або встановлено значення порожнього рядка, дані трасування буде надіслано до стандартного виведення помилок. Зауважте, що встановлення для BASH_XTRACEFD значення 2 (дескриптор файла стандартного виведення помилок) з наступним скасуванням встановлення значення призведе до закриття стандартного виведення помилок.
Шлях пошуку для команди cd. Це список записів каталогів, які відокремлено двокрапками, у якому оболонка шукатиме каталоги, які вказано як аргументи команди cd. Зразок значення: “.:~:/usr”.
Встановити кількість значень стану завершених дочірніх процесів, які має зберігати оболонка. Bash забороняє зменшення цього значення до рівня, який є нижчим за обов'язковий мінімум POSIX максимальне значення (у поточній версії 8192), яке теж не можна перевищувати. Мінімальне значення залежить від системи.
Використовується у складеній команді select для визначення ширини термінала при виведенні списків вибору. Буде встановлено автоматично, якщо увімкнено параметр checkwinsize або в інтерактивній оболонці при отриманні SIGWINCH.
Змінна-масив, з якої bash читає можливі доповнення, створені функцією оболонки, яку викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче). У кожному з елементів масиву міститься можливий варіант доповнення.
Якщо bash виявить цю змінну у середовищі, коли оболонку буде запущено зі значенням “t”, програма припускатиме, що оболонку запущено у режимі буфера оболонки Emacs, і вимкне редагування рядка.
Розгортається і виконується подібно до BASH_ENV (див. ВИКЛИК вище) при виклику інтерактивної оболонки у режимі posix.
Список відокремлених двокрапками взірців оболонки (див. Відповідність за взірцем), який визначає список назв файлів, які буде проігноровано при пошуку команди із використанням PATH. Файли, назви яких збігатимуться з одним із цих взірців не вважатимуться виконуваними у списку доповнення і виконання команд при пошуку у каталогах PATH. Це не стосуватиметься поведінки команд [, test і [[. Використання EXECIGNORE не стосується повних шляхів до файлів у таблиці хешів команд. Цією змінною можна скористатися для ігнорування файлів бібліотек спільного використання, для яких встановлено біт виконання, але які не є виконуваними файлами. При встановленні відповідності взірцю буде враховано значення параметра оболонки extglob.
Типовий редактор для вбудованої команди fc.
Список відокремлених двокрапками суфіксів, які слід ігнорувати під час автоматичного доповнення назв файлів (див. READLINE нижче). Назви файлів, чиї суфікси збігаються із одним із записів у FIGNORE, буде виключено зі списку відповідних назв файлів. Зразок значення “.o:~”.
Якщо встановлено числове додатне значення, визначає максимальний рівень вкладеності функцій. Виклики функцій, у яких перевищено рівень вкладеності, призводять до аварійного завершення виконання поточної команди.
Список відокремлених двокрапками взірців, який визначає набір назв файлів, які буде проігноровано при розгортанні шляхів. Якщо назва файла відповідає взірцю розгортання шляху також відповідає одному із взірців у GLOBIGNORE, її буде вилучено зі списку відповідників. Зіставлення зі зразком враховує значення параметра оболонки extglob.
Керує сортуванням результатів розгортання шляхів. Значення цієї змінної визначає критерії упорядковування та порядок результатів розгортання шляху. Якщо ця змінна не встановлена ​​або має значення порожнього рядка, розкриття шляху використовує історичну поведінку упорядкування за назвою у лексикографічному порядку за зростанням, визначеному змінною оболонки LC_COLLATE.
Якщо встановлено, коректне значення починається з необов'язкового символу +, який буде проігноровано, або -, символу який змінює впорядкування за зростанням на впорядкування за спаданням, після чого має бути вказано специфікатор сортування. Коректні специфікатори упорядкування: name, numeric, size, mtime, atime, ctime і blocks, які впорядковують файли за назвою, назвою у числовому, а не в лексикографічному порядку, розміром файла, часом внесення змін, часом доступу, часом зміни inode та кількістю блоків відповідно. Якщо будь-які з ключів, що не є назвою, порівнюються на рівність (наприклад, якщо два файли однакового розміру), упорядковування використовує назву як вторинний ключ сортування.
Наприклад, значення -mtime упорядковує результати за спаданням за часом внесення змін (спочатку найновіші).
Специфікатор numeric призводить до обробки назв, що складаються виключно з цифр, як числа та упорядкування їх за числовим значенням (тому, наприклад, “2” з'явиться у списку перед “10”, ). При використанні numeric, назви, що містять нецифрові елементи, з'являться у списку після всіх назв, що складаються виключно з цифр, і будуть упорядковані за назвою з використанням традиційної поведінки.
Специфікатор упорядковування nosort повністю вимикає упорядковування; bash повертає результати у порядку їх зчитування з файлової системи, ігноруючи будь-які початкові символи -.
Якщо специфікатор упорядковування не вказано, типово буде використано name, тому значення + еквівалентне порожньому рядку, а значення - упорядковує за назвою у порядку спадання. Будь-яке недійсне значення відновлює давню поведінку упорядковування.
Список відокремлених двокрапками значень, які визначають спосіб збереження команд у списку журналу. Якщо до списку значень включено ignorespace, рядки, які починаються з символу пробілу не буде збережено у списку журналу. Значення ignoredups призведе до того, що рядки, які збігаються із попереднім записом у журналі, не буде збережено. Значення ignoreboth є скороченням для поєднання ignorespace і ignoredups. Значення erasedups призведе до того, що усі попередні рядки, які збігаються із поточним рядком буде вилучено зі списку журналу перед збереженням у ньому поточного рядка. Усі інші значення, окрім описаних вище, буде проігноровано. Якщо не встановлено значення HISTCONTROL або у встановленому значенні немає коректних записів, обробник читатиме і зберігатиме у списку журналу усі рядки, які узгоджуються зі значенням HISTIGNORE. Другий і наступні рядки багаторядкових складених команд не перевірятимуться, їх буде додано до журналу без врахування значення HISTCONTROL. Якщо перший рядок багаторядкової складеної команди було збережено, другий та наступні рядки не перевірятимуться і додаватимуться до журналу незалежно від значення HISTCONTROL. Якщо перший рядок не було збережено, другий та наступні рядки команди також не зберігатимуться.
The name of the file in which command history is saved (see HISTORY below). Bash assigns a default value of ~/.bash_history. If HISTFILE is unset or null, the shell does not save the command history when it exits.
Максимальна кількість рядків, які можуть міститися у файлі журналу. Якщо цій змінній надано значення, файл журналу буде обрізано, якщо це потрібно, так, щоб у ньому містилося не більше кількість записів журналу, загальна кількість яких не перевищує вказаної кількості рядків — буде вилучено найстаріші записи. Якщо у списку журналу містяться багаторядкові записи, файл журналу може містити більше рядків, ніж це максимальне значенням, щоб уникнути появі часткових записів журналу. Файл журналу також буде обрізано до цього розміру після запису до нього під час виходу з оболонки або використання вбудованої команди history. Якщо значенням змінної є 0, файл журналу буде обрізано до нульового розміру. Нечислові значення або від'ємні числові значення призводять до заборони обрізання. Оболонка встановлює типове значення за значенням HISTSIZE після читання усіх файлів запуску оболонки.
Список взірців, відокремлених двокрапками, який використовується для визначення того, які рядки команд слід зберігати в списку журналу. Якщо рядок команди відповідає одному із взірців у значенні HISTIGNORE, його не буде збережено у списку журналу. Кожен взірець буде прив'язано початку рядка, він має відповідати усьому рядку (bash неявно не додає “*”). Перевірка відповідності кожного взірця буде виконуватися для рядка після застосування перевірок, визначених HISTCONTROL. Окрім звичайних символів взірців відповідності оболонки, “&” відповідає попередньому рядку у журналі. Символ зворотної похилої риси екранує “&”; зворотну похилу риску до встановлення відповідності буде вилучено. Якщо перший рядок багаторядкової складеної команди було збережено, програма не буде перевіряти другий та наступні рядки і додаватиму їх до журналу незалежно від значення HISTIGNORE. Якщо перший рядок не було збережено, другий та наступні рядки команди також не зберігатимуться. При встановленні відповідності із взірцем буде враховано параметр оболонки extglob.
HISTIGNORE перебирає деякі функції HISTCONTROL. Взірець “&” тотожний до “ignoredups”, , а взірець “[ ]*” тотожний до “ignorespace”. Поєднуючи ці два взірці, з розділенням їх двокрапкою, маємо результат “ignoreboth”.
Кількість команд, які слід зберігати у журналі команд (див. ЖУРНАЛ нижче). Якщо значенням є 0, збереження команд до списку команд не виконуватиметься. Якщо значення є від'ємним, до списку журналу зберігатимуться усі команди (без обмежень на кількість). Після читання файлів запуску оболонка встановлює типове значення 500.
Якщо ця змінна встановлена і її значення не порожнє (null), воно використовується як рядок форматування strftime(3) щоб надрукувати позначку часу, пов’язану з кожним записом журналу, що виводиться вбудованою командою history. Якщо ця змінна встановлена, мітки часу записуються до файлу журналу, щоб вони могли зберігатися протягом сеансів оболонки. Щоб відрізнити позначки часу від інших рядків журналу, використовується символ коментаря журналу.
Домашній каталог поточного користувача; типовий аргумент для вбудованої команди cd. Значення цієї змінної також використовується при розгортанні записів із тильдою.
Contains the name of a file in the same format as /etc/hosts that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is attempted after the value is changed, bash adds the contents of the new file to the existing list. If HOSTFILE is set, but has no value, or does not name a readable file, bash attempts to read /etc/hosts to obtain the list of possible hostname completions. When HOSTFILE is unset, bash clears the hostname list.
Внутрішній роздільник полів (Internal Field Separator), який буде використано для поділу тексту на слова після розгортання і для поділу рядків на слова за допомогою вбудованої команди read. Поділ на слова описано у розділі РОЗГОРТАННЯ. Типовим значенням є “<space><tab><newline>”.
Визначає дію інтерактивної оболонки у відповідь на отримання символу EOF як єдиного елемента вхідних даних. Якщо встановлено значення, воно вважатиметься кількістю послідовних символів EOF, які має бути введено як перші символи рядків вхідних даних, перш ніж bash завершить роботу. Якщо змінну встановлено, але вона не має числового значення або значення є порожнім, буде використано типове значення 10. Якщо значення змінної не встановлено, для оболонки EOF буде кінцем введення.
The filename for the readline startup file, overriding the default of ~/.inputrc (see READLINE below). If that variable is unset, readline will read both /etc/inputrc and ~/.inputrc.
Якщо у середовищі є ця змінна на момент запуску оболонки, bash припускає, що програму запущено всередині буфера оболонки і може вимкнути редагування рядків, залежно від значення змінної TERM.
Використовується для визначення категорії локалі для усіх категорій, які не було окремо вибрано за допомогою змінної, назва якої починається з LC_.
Значення цієї змінної має вищий пріоритет за значення LANG та будь-якої іншої змінної LC_, яка визначає категорію локалі.
Ця змінна визначає порядок сортування, який буде використано при упорядковуванні результатів розгортання шляхів до файлів, та визначає поведінку при розгортанні діапазонів, класів еквівалентності та схем упорядковування при розгортанні шляхів та встановленні відповідності за взірцем.
Ця змінна визначає спосіб обробки символів та поведінку класів символів при розгортанні шляхів до файлів та встановленні відповідності за взірцем.
Ця змінна визначає локаль, яку буде використано для трансляції рядків у подвійних лапках, яким передує символ $.
Ця змінна визначає категорію локалей, яку буде використано для форматування чисел.
Ця змінна визначає категорію локалей, яку буде використано для форматування записів дати і часу.
Використовується у складеній команді select для визначення довжини стовпчика при виведенні списків вибору. Буде встановлено автоматично, якщо увімкнено параметр checkwinsize або в інтерактивній оболонці при отриманні SIGWINCH.
Якщо значенням встановлено значення назви файла або каталогу, і не встановлено значення змінної MAILPATH, bash повідомлятиме користувачеві про надходження пошти до вказаного файла або каталогу у форматі Maildir.
Визначає наскільки часто (у секундах) bash має перевіряти пошту. Типовим значенням є 60 секунд. Коли настане момент перевірити пошту, оболонка виконає відповідні дії до показу основного запиту. Якщо значення цієї змінної не встановлено або встановлено значення, яке не є додатним або нульовим, оболонка вимкне перевірку пошти.
Список відокремлених двокрапками назв файлів, у яких слід шукати пошту. Повідомлення, яке буде виведено при надходженні пошти до певного файла, можна вказати, відокремивши назву файла від повідомлення за допомогою “?”. Якщо використати $_ у тексті повідомлення, змінну буде розгорнуто до назви поточного поштового файла. Приклад:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash можна налаштувати на надання типового значення для цієї змінної (стандартного значення не передбачено), але розташування файлів пошти користувача, яке використовуватиме оболонка, залежить від системи (наприклад, /var/mail/$USER).

Якщо встановлено значення 1, bash виводитиме повідомлення про помилки, які створено вбудованою командою getopts (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). OPTERR буде ініціалізовано значенням 1 кожного разу, коли викликатиметься оболонка або виконуватиметься скрипт оболонки.
Шлях пошуку для команд. Це список відокремлених двокрапками записів каталогів, у яких оболонка шукатиме команди (див. ВИКОНАННЯ КОМАНД нижче). Назва каталогу нульової довжини (null) у значенні PATH позначає поточний каталог. Порожня назва каталогу може з'являтися як два сусідніх стовпчики або початковий чи кінцевий стовпчик. Типовий шлях залежить від системи і визначається адміністратором, який встановив bash. Стандартним значенням є
/usr/local/bin:/usr/local/sbin:.if  0<78n .br
/usr/bin:/usr/sbin:/bin:/sbin
Якщо ця змінна є частиною середовища на момент запуску bash, оболонка перейде у режим posix до читання файлів запуску, так, наче було вказано параметр виклику --posix. Якщо встановити значення змінної під час роботи оболонки, bash увімкне режим posix так, наче було виконано команду “set -o posix” Коли оболонка переходить у режим posix, вона встановлює значення для цієї змінної, якщо це значення ще не було встановлено.
Якщо встановлено значення цієї змінної, і цим значенням є масив, о показу кожного з основних запитів буде виконано значення кожного із елементів масиву. Якщо значення встановлено, але воно не є масивом, це значення буде використано як команду, яку слід виконати.
Якщо встановлено додатне значення, це значення буде використано як кількість кінцевих компонентів запису каталогу, які слід зберегти при розгортанні екранованих послідовностей запитів \w і \W (див. ЗАПИТИ нижче). Вилучені символи буде замінено трьома крапками.
Значення цього параметра буде розгорнуто (див. ЗАПИТИ нижче) і виведено інтерактивними оболонками після читання команди і перед її виконанням.
Значення цього параметра розгортається (див. ЗАПИТИ нижче) і використовується як основний рядок запиту. Типове значення — “\s-\v\$ ”.
Значення цього параметра розгортається, як з PS1, і використовується як вторинний рядок запиту. Типове значення — “> ”.
Значення цього параметра використовується як запит для команди select (див. ГРАМАТИКА ОБОЛОНКИ вище).
Значення цього параметра буде розгорнуто, як і PS1, а значення буде виведено перед кожною командою, яку bash виведе під час виконання. Перший символ розгорнутого значення PS4, за потреби, буде відтворено декілька разів для позначення декількох рівнів опосередкованості. Типовим значенням є “+ ”.
Ця змінна розгортається до повного шляху до оболонки. Якщо не встановлено під час запуску оболонки, bash встановлює для неї значення повного шляху до оболонки входу до системи поточного користувача.
Значення цього параметра використовується як рядок формату, що визначає, як слід показувати інформацію про час для конвеєрів із префіксом time. Символ % розпочинає escape-послідовність, яка розширюється до значення часу або іншої інформації. Escape-послідовності та їх значення такі; дужки позначають необов'язкові частини.

%%
Символ %.
%[p][l]R
Тривалість виконання у секундах.
%[p][l]U
Кількість секунд, протягом яких процесор було задіяно у режимі користувача.
%[p][l]S
Кількість секунд, протягом яких процесор було задіяно у режимі системи.
%P
Частка часу процесора, яку обчислено за формулою (%U + %S) / %R.
Необов'язкове p є цифрою, яка визначає точність, кількість цифр дробової частини після десяткової крапки. Значення 0 означає, що не слід виводити ні крапку, ні дробову частину. time виводить не більше шести цифр після десяткової крапки; значення p, які є більшим за 6, буде просто замінено на 6. Якщо p не вказано, precision виведе три цифри після десяткової крапки.
Необов'язкове l визначає довгий формат, включено із хвилинами, форми MMmSS.FFs. Значення p визначає, чи слід включати дробову частину.
Якщо значення цієї змінної не встановлено, bash працюватиме так, наче вона має значення $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. Якщо значення є порожнім, дані щодо часу виведено не буде. При виведенні рядка форматування буде додано кінцевий символ нового рядка.
Якщо встановлено додатне значення, вбудована команда read використає значення, як типовий час очікування. Команда select завершить роботу, якщо вхідні дані не буде отримано протягом TMOUT секунд, якщо вхідні дані надходять з термінала. В інтерактивній оболонці значення буде використано як кількість секунд, протягом яких слід очікувати на рядок вхідних даних після показу основного запиту. Bash завершить роботу після очікування протягом вказаної кількості секунд, якщо не буде отримано повного рядка вхідних даних.
Якщо встановлено, bash використовує значення як назву каталогу, у якому bash створює тимчасові файли для використання в оболонці.
Ця змінна керує тим, як оболонка взаємодіє із користувачем і керуванням завданнями. Якщо встановлено значення цієї змінної, прості команди, які складаються лише з одного слова, без переспрямувань вважатимуться кандидатами на відновлення наявного зупиненого завдання. Двозначність заборонено: якщо існує декілька завдань, записи яких починаються із введеного слова або його містять, буде вибрано завдання, доступ до якого було здійснено останнім. Назва зупиненого завдання у цьому контексті є рядком команди, яку використано для його запуску, як її було б показано командою jobs. Якщо встановлено значення exact, слово має відповідати назві зупиненого завдання точно; якщо встановлено значення substring, визначений рядок має збігатися із підрядком у назві зупиненого завдання. Значення substring працює подібно до ідентифікатора завдання %? (див. КЕРУВАННЯ ЗАВДАННЯМИ нижче). Якщо встановлено будь-яке інше значення (наприклад, prefix), слово має бути префіксом назви зупиненого завдання; це працює подібно до ідентифікатора завдання %рядок.
Два або три символи, які керують доповненням за журналом, швидким підставлянням та токенізацією (див. ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче). Перший символ — це символ доповнення за журналом, символ, який зазвичай починає доповнення за журналом “!”. Другий символ є символом швидкого підставляння, зазвичай “^”. Коли він з'являється як перший символ у рядку, підставляння у журналі повторює попередню команду, замінюючи один рядок іншим. Необов'язковий третій символ — це символ коментаря у журналі, зазвичай “#”, , що вказує на те, що решта рядка є коментарем, коли цей символ з'являється як перший символ слова. Символ коментаря у журналі вимикає підставляння у журналі для решти слів у рядку. Це не обов'язково призводить до того, що синтаксичний аналізатор оболонки оброблятиме решту рядка як коментар.

Масиви

У bash передбачено одновимірні індексовані та асоціативні змінні-масиви. Як індексований масив можна використати будь-яку змінну. Масив явним чином оголошується вбудованою командою declare. Обмеження на максимальний розмір масиву не передбачено, як і вимоги, щоб усі елементи було індексовано або асоційовано неперервно. Посилання на елементи індексованих масивів здійснюється за допомогою арифметичних виразів, які мають розгортатися до цілого числа (див. АРИФМЕТИЧНЕ ОЦІНЮВАННЯ нижче). Нумерація починається з нуля. Посилання на елементи асоціативних масивів здійснюється з використанням довільних рядків. Якщо це явно не визначено, індекси в індексованому масиві мають бути невід'ємними цілими числами.

Оболонка виконує розгортання параметрів і змінних, арифметичне розгортання, підставляння команд і вилучення лапок для підписів індексованих масивів. Оскільки це потенційно може призвести до порожніх рядків, механізм індексування підписів розглядає їх як вирази, що дорівнюють 0.

Оболонка виконує розгортання тильди, розгортання параметрів та змінних, арифметичне розгортання, підставляння команд і вилучення лапок для підписів асоціативного масиву. Порожні рядки не можна використовувати як ключі асоціативного масиву.

Bash автоматично створює упорядкований масив, якщо будь-якій змінній надано значення з використанням синтаксису

назва[підпис]=значення .
Значення підпис буде оброблено як арифметичний вираз, результатом обчислення якого має бути число, яке є більшим за нуль або рівним нулеві. Щоб явним чином оголосити індексований масив, скористайтеся командою
declare -a назва
(див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
declare -a назва[підпис]
також можна скористатися командою; підпис буде проігноровано.

Асоціативні масиви створюють через

declare -A назва
.

Атрибути змінної-масиву можна вказати за допомогою вбудованих команд declare і readonly. Кожен атрибут застосовується до усіх елементів масиву.

Надати масиву значення можна за допомогою складених синтаксичних конструкцій встановлення значень у формі назва=(значення1 ... значенняn), де кожне значення можна вказувати у формі [підпис]=рядок. Для індексованих масивів достатньо вказати лише рядок. Кожне значення у списку розгортається з використанням усіх розгортань в оболонці, які описано нижче у розділі РОЗГОРТАННЯ, але значення, які є справжніми наданнями значень змінним, включно з дужками і підписами, не підлягають розгортанню дужок та розбиттю на слова, як це відбувається у випадку надання значення окремим змінним.

При встановленні значення у індексованих масивах, якщо вказано необов'язкові дужки і підпис, значення буде надано елементу з відповідним індексом. Якщо підпис не буде вказано, індексом елемента, якому буде надано значення, буде індекс останнього елемента, якому було надано значення якоюсь інструкцією, плюс один. Нумерація елементів масиву починається з нуля.

При встановленні значень асоціативного масиву словами у складеній інструкції надання значення можуть бути або інструкції надання значень, для яких потрібен підпис елемента, або список слів, які буде оброблено як послідовність альтернативних ключів та значень: назва=( ключ1 значення1 ключ2 значення2 ...). Результат обробки цих слів буде таким самим, як для назва=( [ключ1]=значення1 [ключ2]=значення2 ...). Перше слово у списку визначає, як оброблятимуться інші слова; усі інструкції надання значень у списку мають належати до одного типу. Якщо використовуватимуться пари ключ/значення, ключі не можна пропускати, вони не можуть бути порожніми; останнє пропущене значення буде оброблено як порожній рядок.

Таку синтаксичну конструкцію також приймає вбудована команда declare. Значення окремих елементів масиву можна вказати за допомогою синтаксичної конструкції назва[підпис]=значення, впровадженої вище.

При наданні значення в індексованому масиві, якщо параметру назва передано від'ємний індекс, для визначення індексу елемента це число буде додано до числа, яке на одиницю більше максимального індексу у масиві назва. Отже, від'ємні індекси відраховуватимуться від кінця масиву, а індекс -1 є індексом останнього елемента масиву.

Оператор “+=” допише змінну до масиву змінних при наданні значення за допомогою синтаксису складеного надання значень; див. ПАРАМЕТРИ вище.

Доступ до будь-якого елемента масиву можна отримати за допомогою синтаксичної конструкції ${назва[підпис]}. Фігурні дужки є обов'язковими для уникнення конфліктів з розгортанням шляхів до файлів. Якщо підписом є @ або *, слово буде розгорнуто до усіх елементів масиву назва, якщо протилежне не вказано в описі вбудованої команди або розгортання слова. Ці два підписи працюють по-різному, лише якщо слово взято у подвійні лапки. Якщо слово взято у подвійні лапки, ${назва[*]} розгортається до одинарного слова зі значенням усіх елементів масиву, які відокремлено один від одного першим символом спеціальної змінної IFS, а ${назва[@]} розгортає кожен елемент масиву назва в окреме слово. Якщо у масиві немає елементів, ${назва[@]} розгортається у порожнє значення. Якщо всередині слова відбувається розгортання у подвійних лапках, результат розгортання першого параметра буде об'єднано із початковою частиною початкового слова, а розгортання останнього параметра буде об'єднано із останньою частиною початкового слова. Така процедура є подібною до розгортання спеціальних параметрів * і @ (див. Спеціальні параметри вище).

${#назва[підпис]} розгортається до довжини ${назва[підпис]}. Якщо підписом є * або @, розгортанням є кількість елементів у масиві.

Якщо результатом обчислення підпису, що використовується для посилання на елемент індексованого масиву, є число менше нуля, його буде оброблено як число, більше за максимальний індекс масиву, тому від'ємні індекси відраховуються з кінця масиву, а індекс -1 посилається на останній елемент.

Посилання на змінну-масив без визначення підпису є еквівалентним до посилання на елемент масиву із підписом 0. Можна використовувати будь-які посилання на змінну-масив із коректним підписом. Якщо потрібно, bash автоматично створить відповідний масив.

Значення змінної-масиву вважається встановленим, якщо підпису змінної надано значення. Коректним значенням може бути і порожній рядок.

Можна отримати ключі (індекси) масиву, а також значення. ${!назва[@]} і ${!назва[*]} розгортаються до індексів, які призначено у змінній-масиві назва. Обробка у подвійних лапках є подібною до розгортання спеціальних параметрів @ і * у подвійних лапках.

Для знищення масивів використовують вбудовану команду unset. Команда unset назва[підпис] скасовує встановлення елемент масиву з індексом підпис, як для індексованих, так і для асоційованих масивів. Від'ємні значення підписів буде оброблено в описаний вище спосіб. Скасування встановлення останнього елемента у змінній-масиві не скасовує встановлення змінної. Команда unset назва, де назва є назвою масиву, вилучає увесь масив. unset назва[підпис], де підписом є * або @, поводиться по-різному, залежно від того, є назва індексованим чи асоціативним масивом, якщо підписом є * або @. Якщо назва є асоціативним масивом, команда скасовує встановлення елемента із підписом * або @. Якщо назва є індексованим масивом, unset вилучає усі елементи, але не вилучає сам масив.

При використанні назви змінної із підписом як аргументу команди, так само, як із unset, без використання синтаксису розгортання слів, описаного вище (наприклад, unset a[4]), аргумент підлягатиме розгортанню шляхів до файлів. Якщо розгортання шляхів до файлів є небажаним, аргумент слід взяти у лапки (приклад: unset 'a[4]').

Вбудовані команди declare, local та readonly приймають параметр -a для визначення індексованого масиву та параметр -A для визначення асоціативного масиву. Якщо вказано обидва параметри, пріоритет має параметр -A. Вбудована команда read приймає параметр -a для призначення списку слів, які прочитано зі стандартного джерела вхідних даних, до масиву. Вбудовані команди set і declare показують значення масиву у спосіб, яким можна скористатися для встановлення значень нового масиву. Інші вбудовані команди також приймають аргументи назв масивів (наприклад, mapfile); див. описи окремих вбудованих команд нижче, щоб дізнатися більше. Оболонка надає низку вбудованих змінних-масивів.

РОЗГОРТАННЯ

Розгортання буде виконано у рядку команди після того, як його буде поділено на слова. Оболонка виконує такі розгортання: розгортання у дужках, розгортання тильди, розгортання параметрів та змінних, підстановка команд, арифметичне розгортання, поділ на слова, розгортання шляхів і вилучення лапок.

Порядок розгортань є таким: розгортання у дужках; розгортання тильди, розгортання параметрів і змінних, арифметичні обчислення і заміна команд (буде виконано зліва праворуч); поділ на слова; розгортання шляхів і вилучення лапок.

У системах, де передбачено відповідну підтримку, доступним є ще одне розгортання: заміна процесу. Це розгортання буде виконано одночасно із розгортанням тильди, розгортанням параметрів і змінних, арифметичними обчисленнями і заміною команд.

Вилучення лапок завжди виконується останнім. Воно вилучає символи лапок у початковому слові, а не ті, що є результатом одного з інших розгортань, якщо тільки їх самих не було взято у лапки.

Збільшити кількість слів у розгортанні можуть лише розгортання у дужках, поділ на слова і розгортання шляху; інші розгортання розгортають одинарне слово у одинарне слово. Єдиним виключенням є розгортання "$@" і "${назва[@]}", а також, здебільшого, $* та ${назва[*]}, як це описано вище (див. ПАРАМЕТРИ).

Розгортання у дужках

Розгортання у дужках є механізмом створення довільних рядків зі спільним префіксом і суфіксом, кожен з яких може бути порожнім. Цей механізм подібний до розгортання шляхів, але породжені назви файлів можуть бути і назвами файлів, які не існують. Взірці, які буде оброблено розгортанням у дужках, складаються з необов'язкової вступної частини, за якою має бути вказано або послідовність відокремлених комами рядків, або послідовність виразів у парі фігурних дужок, яку завершує необов'язкова кінцева частина. Вступну частину буде дописано перед кожним рядком у фігурних дужках, а потім до кожного з результатів буде дописано кінцеву частину. Розгортання відбувається зліва праворуч.

Розгортання у дужках може бути вкладеним. Результати розгортання кожного рядка не упорядковуються; розгортання у дужках зберігає порядок зліва праворуч. Приклад: a{d,c,b}e буде розгорнуто до “ade ace abe”.

Вираз послідовності має форму x..y[..крок], де x і y є або цілими числами або одинарними літерами, а крок, необов'язковий крок у послідовності, є цілим числом. Якщо вказано цілі числа, вираз розгортається до кожного цілого числа від x до y, включно. Якщо x або y починається з нуля, усі елементи створеної послідовності складатимуться з однакової кількості цифр, дописавши нуль там, де це потрібно. Якщо вказано літери, вираз буде розгорнуто до кожного символу, який лексикографічно потрапляє у діапазон від x до y, включно, з використанням локалі C. Зауважте, що x і y мають належати до одного типу (цілих чисел або літер). Якщо вказано крок, його буде використано як приріст між елементами послідовності. Типовим кроком є 1 або -1, відповідно до взаємного розташування кінців послідовності.

Розгортання у дужках виконується до будь-яких інших розгортань. У результатах буде збережено усі символи, які є спеціальними для інших розгортань. Розгортання є строго текстовим. Bash не виконує жодної синтаксичної обробки контексту розгортання або тексту у фігурних дужках.

Правильно форматоване розгортання у дужках має містити ненейтралізовані початкову і кінцеву фігурні дужки та принаймні одну ненейтралізовану кому або один коректний вираз послідовності. Усі розгортання у дужках із помилковим форматуванням буде оброблено буквально.

A “{” або Q, можна взяти в лапки зі зворотною похилою рискою, щоб запобігти тому, щоб програма вважала його частиною виразу з фігурними дужками. Щоб уникнути конфліктів із розгортанням параметрів, рядок “${” не вважається придатним для розгортання у дужках та забороняє розгортання у дужках до закриття “}”.

Ця конструкція типово використовується як скорочення, якщо загальний префікс рядків, які має бути створено, є довшим, ніж у наведеному вище прикладі:

mkdir /usr/local/src/bash/{old,new,dist,bugs}
або
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Розгортання у дужках сучасних версій є дещо несумісним із давніми версіями sh. Старі версії sh не обробляють початкову або кінцеву фігурні дужки особливим чином, якщо вони є частиною слова, і зберігають їх у виведених даних. Bash у процесі розгортання у дужках вилучає фігурні дужки зі слів. Наприклад, якщо передати sh слово “file{1,2}” , виведено буде те саме слово. Результатом обробки того самого слова у bash буде “file1 file2” . Якщо потрібна строга сумісність із sh, запускайте bash із параметром +B або вимкніть розгортання у дужках за допомогою параметра +B команди set (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Розгортання тильди

Якщо слово починається з ненейтралізованого символу тильди ( “~”), усі символи до першого ненейтралізованого символу похилої риски (або усі символи, якщо у слові немає ненейтралізованої похилої риски) вважатимуться тильда-префіксом. Якщо жоден із символів у тильда-префіксі не є нейтралізованим, символи у тильда-префіксі вважатимуться можливою назвою облікового запису. Якщо ця назва облікового запису є порожнім рядком, тильду буде замінено на значення параметра оболонки HOME. Якщо значення HOME не встановлено, тильду буде замінено на адресу домашнього каталогу користувача, від імені якого запущено оболонку. У всіх інших випадках тильда-префікс буде замінено домашнім каталогом, пов'язаним із вказаною назвою облікового запису.

Якщо префіксом-тильдою є “~+”, значення змінної оболонки PWD замінює префікс-тильду. Якщо префіксом-тильдою є “~-”, оболонка замінює на значення змінної оболонки OLDPWD, якщо її встановлено. Якщо символи після тильди в префіксі-тильді складаються з числа N, можливо з префіксом “+” або “-”, префікс-тильду буде замінено відповідним елементом зі стосу каталогів, як його було б показано вбудованою функцією dirs, викликаною з символами, що йдуть після тильди в префіксі-тильді, як аргументом. Якщо символи, що йдуть після тильди в префіксі-тильді, складаються з числа без початкового “+” або “-”, розгортання тильди припускає “+”.

Результати розкриття тильди обробляються так, ніби вони взяті у лапки, тому заміна не підлягає розбиттю на слова та розгортанню шляхів.

Якщо назва облікового запису для входу є некоректною або не вдасться виконати розгортання тильди, префікс-тильда лишиться незмінним.

В усіх інструкціях із встановленням значення змінної bash виконає перевірку на ненейтралізовані тильда-префікси одразу після : або першого =. Якщо такі префікси буде виявлено, також буде виконано розгортання тильди. Отже, можна використовувати назви файлів з тильдами у командах зі встановленням значень для PATH, MAILPATH та CDPATH — оболонка надасть змінній розгорнуте значення.

Крім того, Bash виконує розгортання тильди у словах, які відповідають умовам надання змінним значення (як це описано вище у розділі ПАРАМЕТРИ), коли вони з'являються як аргументи у простих командах. У режимі posix Bash цього не робитиме, окрім описаних вище команд оголошення.

Розгортання параметрів

Оператор “$” впроваджує розгортання параметрів, заміну команд або арифметичні обчислення. Назви параметрів або символів, які слід розгорнути, може бути взято у фігурні дужки, які є необов'язковим, але слугують для захисту змінної від розгортання змінної за символами, які вказано після її назви і які може бути оброблено як частину назви.

Якщо використано фігурні дужки, відповідною завершальною дужкою вважатиметься перша « “}” », яку не екрановано символом зворотної похилої риски і яка не є частиною нейтралізованого рядка, і не перебуває у вбудованому арифметичному виразі, заміні команди або розгортанні параметра.

Базовою формою розгортання параметрів є

${параметр}

де буде підставлено значення параметра. Якщо параметр є позиційним параметром, номер якого складається з декількох цифр, або якщо після параметра вказано символ, який не слід обробляти як частину його назви, слід скористатися фігурними дужками. Параметр має бути параметром оболонки, який описано вище (див. ПАРАМЕТРИ) або посиланням на масив (Масиви).

Якщо першим символом параметра є знак оклику (!) і параметр не належить до типу nameref, він впроваджує рівень опосередкованості. Bash використовує значення, яке сформовано розгортанням решти параметра як новий параметр; далі, розгортає цей новий параметр і використовує значення у решті розгортання замість розгортання початкового параметра. Цей процес відомий як опосередковане розгортання. Отримане значення підлягає розгортанню тильди, розгортанню параметрів, заміні команд та арифметичним обчисленням. Якщо параметр належить до типу nameref, розгортання дає назву параметра, на який посилається параметр, а не повне опосередковане розгортання. Виключеннями з цього правила є розгортання ${!префікс*} та ${!назва[@]}, які описано нижче. Щоб було впроваджено опосередковане розгортання, після знаку оклику має бути одразу вказано ліву фігурну дужку.

В усіх наведених нижче випадках слово підлягатиме розгортанню тильди, розгортанню параметрів, заміні команд та арифметичним обчисленням.

Якщо не виконуватиметься розгортання підрядків, з використанням документованих нижче форм (наприклад, :-), bash виконує перевірку того, чи є параметр невстановленим або порожнім. Якщо не буде використано двокрапку, виконуватиметься перевірка лише на те, чи є параметр невстановленим.

${параметр:-слово}
Використовувати типові значення. Якщо значення параметра не буде встановлено або воно буде порожнім, буде підставлено розгортання слова. У інших випадках буде підставлено значення параметра.
${параметр:=слово}
Призначити типові значення. Якщо значення параметра не встановлено або його значення є порожнім, для параметра буде встановлено значення слово, а розгортанням буде остаточне значення параметра. У такий спосіб не можна встановлювати значення для позиційних і спеціальних параметрів.
${параметр:?слово}
Показ помилки, якщо порожній або не встановлено. Якщо параметр має порожнє значення або його значення не встановлено, розгортання слова (або повідомлення щодо цього ефекту, якщо слова немає) буде записано до стандартного потоку помилок, і оболонка, якщо вона не є інтерактивною, завершить роботу з ненульовим станом. Інтерактивна оболонка не завершить роботу, але не виконуватиме команди, яку пов'язано із розгортанням. В усіх інших випадках буде підставлено параметр.
${параметр:+слово}
Використати альтернативне значення. Якщо параметр має порожнє значення або значення параметра не встановлено, підставляння не виконуватиметься. В усіх інших випадках буде підставлено розгортання слова. Буде використано значення параметра.
${параметр:відступ}
${параметр:відступ:довжина}
Розгортання підрядка. Буде розгорнуто до довжина символів значення параметр, починаючи з символу, який вказано значенням відступ. Якщо параметром є @ або *, індексований масив із підписом @ або * або назва асоціативного масиву, результат буде іншим, описаним нижче. Якщо : довжина не вказано (перша форма вище), буде виконано розгортання до підрядка значення параметра, що починається з символу, вказаного аргументом відступ, і продовжується до кінця значення. Якщо відступ не вказано, значенням відступу вважається 0. Якщо не вказано довжину, але є двокрапка післявідступу, відступ вважатиметься рівним 0. Значення довжина і відступ є арифметичними виразами (див. АРИФМЕТИЧНІ ОБЧИСЛЕННЯ нижче).
Якщо обчисленим значенням відступу є від'ємне число, значення буде використано як відступ у символах з кінця значення параметра. Якщо обчисленим значенням довжини є від'ємне число, його буде використано як відступ у символах від кінця значення параметра, а не кількість символів, а результатом розгортання будуть символи між значенням відступу і обчисленим значенням довжини. Зауважте, що від'ємний відступ має бути відокремлено від двокрапки принаймні одним пробілом, щоб його не можна було сплутати з розгортанням :-.
Якщо параметром є @ або *, результатом буде довжина позиційних параметрів, починаючи з параметра відступ. Від'ємні значення відступу буде відраховано від значення на одиницю більшого за найбільший позиційний параметр. Отже, відступ -1 визначає останній позиційний параметр (або 0, якщо позиційних параметрів немає). Якщо обчисленим значенням аргументу довжина є від'ємне значення, програма повідомить про помилку розгортання.
Якщо параметром є назва індексованого масиву із підписом @ або *, результатом буде довжина елементів масиву, починаючи з ${параметр[відступ]}. Від'ємні значення аргументу відступ буде відраховано від номера, який на одиницю більший за максимальний індекс у вказаному масиві. Якщо обчисленим значенням аргументу довжина є від'ємне значення, програма повідомить про помилку розгортання.
Застосоване до асоціативного масиву розгортання підрядків дає невизначені результати.
Відлік елементів у підрядках ведеться від нуля, якщо не використано позиційних параметрів. У випадку використання позиційних параметрів, типово, індексування починається з 1. Якщо відступ дорівнює 0 і використано позиційні параметри, до списку буде дописано префікс $0.
${!префікс*}
${!префікс@}
Префікс відповідності назв. Буде розгорнуто до назв змінних, чиї назви починаються з префікса. Записи назви буде відокремлено першим символом спеціальної змінної IFS. Якщо використано @ і розгортання відбувається у подвійних лапках, кожну назву змінної буде розгорнуто в окреме слово.
${!назва[@]}
${!назва[*]}
Список ключів масиву. Якщо назва є змінною-масивом, буде розгорнуто до списку індексів (ключів) масиву, яким надано значення у масиві назва. Якщо назва не є масивом, буде розгорнуто у 0, якщо значення назва встановлено, і порожнє значення, якщо ні. Якщо використано @ і розгортання відбувається у подвійних лапках, кожен ключ буде розгорнуто до окремого слова.
${#параметр}
Довжина параметра. Буде замінено на довжину розгорнутого значення параметра у символах. Якщо параметром є * або @, буде замінено кількістю позиційних параметрів. Якщо параметром є назва масиву із підписом * або @, буде замінено на кількість елементів у масиві. Якщо параметр є назвою індексованого масиву із підписом — від'ємним числом, це число відраховуватиметься від більшого на одиницю за максимальний індекс параметра числа. Отже від'ємні індекси відраховуються від кінця масиву, а індекс -1 відповідає останньому елементу масиву.
${параметр#слово}
${параметр##слово}
Вилучення префікса за взірцем. Слово буде розгорнуто для отримання взірця, як у розгортанні шляхів. Отриманий взірець буде використано для обробки розгорнутого значення параметра з використанням правил, які описано у розділі Відповідність за взірцем нижче. Якщо взірець відповідатиме початку значення параметра, результатом розгортання буде розгорнуте значення параметра, з якого вилучено найкоротший відповідний взірець (випадок “#” ) або найдовший відповідний взірець (випадок “##” Якщо параметром є @ або *, дію з вилучення взірця буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію з вилучення взірцябуде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
${параметр%слово}
${параметр%%слово}
Вилучення суфікса за взірцем. Слово буде розгорнуто для отримання взірця, як у розгортанні шляхів. Отриманий взірець буде використано для обробки розгорнутого значення параметра з використанням правил, які описано у розділі Відповідність за взірцем нижче. Якщо взірець відповідатиме завершенню значення параметра, результатом розгортання буде розгорнуте значення параметра, з якого вилучено найкоротший відповідний взірець (випадок “%” ) або найдовший відповідний взірець (випадок “%%” Якщо параметром є @ або *, дію з вилучення взірця буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію з вилучення взірцябуде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
${параметр/взірець/рядок}
${параметр//взірець/рядок}
${параметр/#взірець/рядок}
${параметр/%взірець/рядок}
Заміна за взірцем. Взірець буде розгорнуто для створення взірця та зіставляється з розгорнутим значенням параметра, як описано в розділі Відповідність за взірцем нижче. Найдовший збіг зі взірцем у розгорнутому значенні замінюється на рядок. Рядок підлягає розгортанню тильди, розгортанню параметрів та змінних, арифметичному розгортанню, заміні команд та процесів, а також вилученню лапок.
У першій формі вище буде замінено лише перший збіг. Якщо використано дві похилі риски, що розділяють параметр та взірець (друга форма вище), усі збіги взірця буде замінено на рядок. Якщо перед взірцем стоїть # (третя форма вище), він має збігатися з фрагментом на початку розгорнутого значення параметра. Якщо перед взірцем стоїть % (четверта форма вище), він має збігатися з фрагментом у кінці розгорнутого значення параметра.
Якщо розгортанням рядка є порожнє значення, відповідники взірця буде вилучено, а / з наступним взірцем може бути пропущено.
Якщо увімкнено параметр оболонки patsub_replacement за допомогою shopt, усі екземпляри & у рядку рядок буде замінено відповідною частиною взірця.
Взяття у лапки будь-якої частини рядка забороняє заміну у розгортанні взятої у лапки частини, включно із заміною рядків, що зберігаються у змінних оболонки. Символ зворотної похилої риски екранує & у рядку; символ зворотної похилої риски буде вилучено для уможливлення використання самого символу & у рядку заміннику. Також символом зворотної похилої риски можна скористатися для екранування символу зворотної похилої риски; використання \\ дає сам символ зворотної похилої риски у заміні. Користувачам слід подбати про подвійне взяття у лапки рядка, щоб уникнути небажаного конфлікту між екрануванням символом зворотної похилої риски і взяття у подвійні лапки, оскільки символ зворотної похилої риски має спеціальне значення у подвійних лапках. Засіб підставляння за взірцем виконує перевірку на & поза лапками після розгортання рядка; програмісти для коду оболонки мають брати у лапки усі &, які має бути використано буквально у заміннику і використати поза лапками усі екземпляри &, які має бути замінено.
Як і оператори вилучення за взірцем, подвійні лапки, у які взято рядок заміни, екранують розгорнуті символи, тоді як подвійні лапки, у які взято увесь блок підставляння параметрів, цього не роблять, оскільки розгортання виконується у контексті, який не враховує жодних лапок, у які взято рядок.
Якщо увімкнено параметр оболонки nocasematch, встановлення відповідності буде виконано без урахування регістру літер.
Якщо параметром є @ або *, дію з заміни буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію з заміни буде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
${параметр^взірець}
${параметр^^взірець}
${параметр,взірець}
${параметр,,взірець}
Зміна регістру. Це розгортання змінює регістр літер у параметрі. Спочатку взірець буде розгорнуто для створення взірця, як описано нижче в розділі Відповідність за взірцем. Потім bash перевіряє символи у розгорнутому значенні параметра на відповідність взірцю, як описано нижче. Якщо символ відповідає взірцю, його регістр буде перетворено. Не слід намагатися встановлювати відповідність взірцю понад одного символу.
Використання “^” перетворює літери нижнього регістру, які відповідають взірцю, на літери верхнього регістру; “,” перетворює відповідні літери верхнього регістру на літери нижнього регістру. Варіанти ^ та , перевіряють перший символ у розгорнутому значенні та перетворюють його регістр, якщо він відповідає взірцю; варіанти ^^ та ,, перевіряють усі символи в розгорнутому значенні та перетворюють кожен символ, який відповідає взірцю. Якщо взірець не вказано, його буде оброблено як ?, символ, який відповідає будь-якому символу.
Якщо параметром є @ або *, дію зі зміни регістру буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію зі зміни регістру буде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
${параметр@оператор}
Перетворення параметрів. Розгортанням буде або перетворення значення параметра або відомості щодо самого параметра, залежно від значення оператора. Усі оператори складаються з однієї літери:

Результатом розгортання є рядок, який є значенням параметра, у якому літери нижнього регістру (малі) замінено на відповідні їм літери верхнього регістру (великі).
Результатом розгортання є рядок, який є значенням параметра, у якому перший символ буде замінено на відповідну літеру верхнього регістру (велику), якщо перший символ є літерою.
Результатом розгортання є рядок, який є значенням параметра, у якому літери верхнього регістру (великі) замінено на відповідні їм літери нижнього регістру (малі).
Результатом розгортання є рядок, який є значенням параметра, у якому вміст нейтралізовано до формату, який можна використати як вхідні дані.
Результатом розгортання є рядок, який є значенням параметра, у якому екрановані послідовності із символом зворотної похилої риски буде розгорнуто так, як у механізмі нейтралізації $'...'.
Результатом розгортання є рядок, який є розгортанням параметра у такий спосіб, наче він є рядком запиту (див. ЗАПИТИ нижче).
Розгортанням є рядок у формі інструкції зі встановлення значення або команди declare, яка, якщо її виконати, повторно створить параметр з його атрибутами і значенням.
Дає, можливо, нейтралізовану версію значення параметра, але виводить значення індексованих або асоціативних масивів як послідовність нейтралізованих пар ключ-значення (див. Масиви вище). Ключі і значення буде взято у лапки у форматі, який може бути повторно використано як вхідні дані.
Розгортанням буде рядок, що складається зі значень прапорців, що відповідають атрибутам параметра.
Подібне до K-перетворення, але розгортає ключі і значення індексованих і асоціативних масивів в окремі слова після поділу на слова.

Якщо параметром є @ або *, дію буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію буде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.

Результат розгортання розгортання буде поділено на слова і застосовано до нього розгортання шляхів у описаний нижче спосіб.

Заміна команд

Заміна команд уможливлює заміну назви команди на результат її виконання. Передбачено дві стандартні форми:

$(команда)

або (застаріле)
`команда`.

Bash виконує розгортання, виконавши команду у середовищі підоболонки і замінивши команду на стандартне виведення команди із вилученням усіх кінцевих символів нового рядка. Вбудовані нові рядки не буде вилучено, але їх може бути вилучено під час поділу на слова. Заміну команди $(cat файл) може бути замінено еквівалентним, але швидшим, $(< файл).

Якщо використано стару форму заміни із використанням зворотного апострофа, зворотний апостроф зберігає своє буквальне значення, якщо після нього не вказано $, ` або \. Перший зворотний апостроф, перед яким немає символу зворотної похилої риски, завершує заміну команди. Якщо використано форму $(команда), усі символи у дужках складають команду; жоден з цих символів не підлягатиме особливій обробці.

Існує альтернативна форма заміни команд:

${c команда;}

яка виконує команду у поточному середовищі виконання та перехоплює її виведення, знову ж таки, без кінцевих символів нового рядка.

Символ c після відкритої фігурної дужки має бути пробілом, табуляцією, символом нового рядка або |, а завершальна фігурна дужка має перебувати у позиції, де може з'явитися зарезервоване слово (тобто перед нею має стояти символ завершення команди, такий як крапка з комою). Bash дозволяє поєднувати завершальну фігурну дужку з рештою символів у слові без додавання метасимволу оболонки, як це зазвичай вимагає зарезервоване слово.

Будь-які побіжні ефекти від command набувають чинності негайно у поточному середовищі виконання і зберігаються у поточному середовищі після завершення команди (наприклад, вбудована функція exit завершує роботу оболонки).

Цей тип заміни команд з першого погляду нагадує виконання неіменованої функції оболонки: локальні змінні створюються так само, як під час виконання функції оболонки, а вбудована функція return примушує команду завершити виконання; однак решта середовища виконання, включаючи позиційні параметри, використовується спільно з функцією, з якої відбувається виклик.

Якщо першим символом після відкритої дужки є |, конструкція розгортається до значення змінної оболонки REPLY після виконання команди, без вилучення будь-яких символів нового рядка в кінці, а стандартне виведення команди залишається таким самим, як і у оболонці, звідки відбувається виклик. Bash створює REPLY як початково невстановлену локальну змінну під час виконання команди і відновлює REPLY до значення, яке вона мала до заміни команди після завершення команди, як і будь-яку локальну змінну.

Заміна команд може бути вкладеною. Для створення вкладеності у формі зі зворотним апострофом екрануйте внутрішні зворотні апострофи символами зворотних похилих рисок.

Якщо заміну взято у подвійні лапки, до результатів не буде застосовано поділ на слова та розгортання шляхів.

Арифметичні обчислення

За допомогою арифметичних обчислень можна визначати значення арифметичного виразу і підставляти до команди результат. Формат арифметичних обчислень є таким:

$((вираз))

Вираз підлягає тим самим розгортанням, що і вираз, якщо його взято у подвійні лапки, але неекрановані подвійні лапки у дужках не оброблятимуться якимось спеціальним чином і просто вилучатимуться. Усі елементи у виразі підлягатимуть розгортанню параметрів та змінних, заміні команд та вилученню нейтралізації. Результат буде оброблено як арифметичний вираз для обчислення. Оскільки спосіб обробки подвійних лапок у Bash потенційно може призвести до порожніх рядків, засіб арифметичного розгортання розглядає їх як вирази, що дорівнюють 0. Арифметичні обчислення можуть бути вкладеними.

Обчислення буде виконано відповідно до наведених нижче у розділі АРИФМЕТИЧНІ ОБЧИСЛЕННЯ правил. Якщо вираз є некоректним, bash виведе до стандартного виведення помилок повідомлення, що вказуватиме на помилку, і не виконуватиме команди, пов'язаної із розгортанням.

Заміна процесу

За допомогою заміни процесів можна посилатися на вхідні і вихідні канали процесів, як на назви файлів. Заміну процесів записують у формі <(список) або >(список). Список процесів буде запущено асинхронно, а якого вхідний і вихідний канали стануть доступними через назву файла. У результаті заміни, цю назву файла буде передано як аргумент поточній команді.

Якщо використано форму >(список), запис до файла буде вхідним каналом для списку. Якщо використано форму <(список), слід буде виконати читання файла, переданого як аргумент, щоб отримати доступ до вихідного каналу списку. Між < або > і лівою дужкою не можна використовувати пробіл, інакше інструкцію буде оброблено як переспрямовування.

Підтримку заміни процесів передбачено у системах, де є підтримка іменованих каналів (FIFO) або метод іменування відкритих файлів /dev/fd.

Коли можливо, заміна процесу виконується одночасно з розгортанням параметрів і змінних, заміною команд та арифметичними обчисленнями.

Поділ на слова

Оболонка сканує результати розгортання параметрів, заміни команд і арифметичних обчислень, які не було виконано всередині подвійних лапок для поділу на слова. Слова, які не було розгорнуто, не буде поділено.

Оболонка трактує кожен символ IFS як роздільник та розділяє результати інших розгортань на слова, використовуючи ці символи як роздільники полів.

Символ пробілу IFS – це пробіл, як визначено вище (див. Визначення), який з'являється у значенні IFS. Пробіл, табуляція та новий рядок завжди вважаються пробілами IFS, навіть якщо їх не буде у категорії space локалі.

Якщо значення IFS не встановлено, розділення полів діє так, ніби його значення було <space><tab><newline>, і обробляє ці символи як пробіли IFS. Якщо значення IFS є порожнім, поділ на слова не відбувається, але неявні порожні аргументи (див. нижче) все одно буде вилучено.

Поділ на слова слів починається з вилучення послідовностей пробільних символів IFS з початку та кінця результатів попередніх розгортань, з наступним поділом на слова решти.

Якщо значення IFS складається лише з пробілів IFS, будь-яка послідовність символів пробілів IFS обмежує поле, тому поле складається з символів, які не є пробілами IFS без лапок, а поля з порожнім значенням утворюються лише у результаті використання лапок.

Якщо IFS містить непробілний символ, то будь-який символ у значенні IFS, який не є пробілом IFS, разом з будь-якими сусідніми пробілами IFS, вважається межею поля. Це означає, що сусідні роздільники, що не є пробілами IFS, створюють нульове поле. Послідовність пробілів IFS також вважається межею поля.

Явні порожні аргументи ("" або '') буде збережено і передано команди як порожні рядки. Ненейтралізовані неявні порожні аргументи, які є результатом розгортання параметрів, які не мають значень, буде вилучено. Якщо параметр без значення буде розгорнуто у подвійних лапках, буде отримано порожній аргумент; його буде збережено і передано команді як порожній рядок.

Якщо нейтралізований порожній аргумент буде частиною слова, чиє розгортання не є порожнім, механізм поділу на слова вилучить частину з порожнім аргументом, лишивши ненульове розгортання. Таким чином, слово “-d''” перетворюється на “-d” після поділу на слова і вилучення порожніх аргументів.

Розгортання шляхів

Після розбиття на слова, якщо не встановлено параметр -f, bash сканує кожне слово на наявність символів *, ? та [. Якщо один із цих символів буде виявлено, і його не взято в лапки, то слово вважатиметься шаблоном — його буде замінено упорядкованим списком назв файлів, що відповідають шаблону (див. Відповідність за взірцем нижче) з урахуванням значення змінної оболонки GLOBSORT.

Якщо не знайдено жодних відповідних назв файлів, а параметр оболонки nullglob не встановлено, слово залишається незмінним. Якщо параметр nullglob встановлено, а збігів не знайдено, слово буде вилучено. Якщо параметр оболонки failglob встановлено, а збігів не знайдено, bash виводить повідомлення про помилку і не виконує команду. Якщо параметр оболонки nocaseglob встановлено, зіставлення виконується без урахування регістру літер.

Якщо для розгортання шляхів використано взірець, символ “.” at the start of a name or immediately following a slash must be matched explicitly, unless the shell option dotglob is set. In order to match the filenames . and .., the pattern must begin with “.” (наприклад, “.?”), even if dotglob is set. If the globskipdots shell option is enabled, the filenames . and .. never match, even if the pattern begins with a “.”. Якщо не встановлюється відповідність шляхам, символ “.” не вважатиметься особливим.

Під час зіставлення з назвою шляху символ похилої риски завжди має явно збігатися із похилою рискою у взірці, але в інших контекстах встановлення відповідності він може збігатися зі спеціальним символом взірця, як описано нижче в розділі Відповідність за взірцем.

Див. опис shopt нижче у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ, де наведено опис параметрів оболонки nocaseglob, nullglob, globskipdots, failglob та dotglob.

The GLOBIGNORE shell variable may be used to restrict the set of file names matching a pattern. If GLOBIGNORE is set, each matching file name that also matches one of the patterns in GLOBIGNORE is removed from the list of matches. If the nocaseglob option is set, the matching against the patterns in GLOBIGNORE is performed without regard to case. The filenames . and .. are always ignored when GLOBIGNORE is set and not null. However, setting GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option, so all other filenames beginning with a “.” . Щоб отримати стару поведінку з ігноруванням назв файлів, що починаються з “.”, , зробіть “.*” одним із взірців у GLOBIGNORE. Параметр dotglob буде вимкнено, якщо не встановлено значення GLOBIGNORE. При встановленні відповідності взірцю буде взято до уваги значення параметра оболонки extglob.

Значення змінної оболонки GLOBSORT контролює, як буде упорядковано результати розгортання шляху, як описано вище у розділі Змінні оболонки.

Відповідність за взірцем

Будь-який символ, який з’являється у взірці, окрім спеціальних символів взірця, описаних нижче, збігається сам із собою. Символ NUL може не зустрічатися у взірці. Зворотна похила риска екранує наступний символ; при збігу зворотна похила риска відкидається. Спеціальні символи взірця слід уводити в лапках, якщо вони мають відповідати буквально.

Спеціальні символи взірців мають таке значення:

*
Збігається з будь-яким рядком, включаючи нульовий (null) рядок. Якщо увімкнено параметр оболонки globstar і в контексті розширення назви шляху використовується *, дві * поруч, використані як єдиний взірець, відповідатимуть усім файлам і нулю або більше каталогів і підкаталогів. Якщо далі йде /, дві * поруч відповідатимуть лише каталогам і підкаталогам.
?
Відповідає будь-якому одинарному символу.
[...]
Відповідає будь-якому із символів, які взято у дужки. Це називається виразому у дужках і відповідає одному символу. Пара символів, розділених дефісом, позначає вираз діапазону; відповідає будь-якому символу, що міститься між цими двома символами включно, з використанням послідовності порівняння поточної локалі та набору символів. Якщо першим після [ є символ ! або ^, то відповідає будь-якому не вкладеному символу. - можна увідповіднити, включивши його в набір як перший або останній символ. ] можна увідповіднити, включивши в набір як перший символ.
Порядок сортування символів у виразі діапазону і символах, включених до діапазону, визначається поточним мовним стандартом і значеннями змінних оболонки LC_COLLATE або LC_ALL, якщо їх встановлено. Для отримання традиційної інтерпретації виразів діапазону, де [a-d] еквівалентне [abcd], встановіть для змінної оболонки LC_COLLATE або LC_ALL значення або увімкніть параметр оболонки globasciiranges.
У виразі між дужками можна вказувати класи символів у формі такої синтаксичної конструкції: [:клас:], де клас є одним із вказаних нижче класів, які визначено у стандарті POSIX :
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
Клас символів відповідає будь-якому символу, що належить класу. Клас символів word відповідає літерам, цифрам та символам _.
У виразі у дужках можна задати клас еквівалентності, скориставшись синтаксисом [=c=], який відповідає всім символам з такою ж вагою зіставлення (як визначено поточним мовним стандартом), що й символ c.
У виразі між дужками, синтаксису [.символ.] відповідає символ зіставлення символ.

Якщо параметр оболонки extglob увімкнено за допомогою вбудованої команди shopt, оболонка розпізнає кілька розширених операторів відповідності взірцю. В подальшому описі список_взірців - це список із одного або кількох взірців, розділених символом |. Складені взірці можна сформувати за допомогою одного або кількох із таких підвзірців:

?(список_взірвців)
Відповідає нульовій або одинарній кількості відповідників вказаних взірців.
*(список_взірвців)
Відповідає нулю, одному або декільком збігам із заданим взірцем.
+(список_взірців)
Відповідає одному або декільком збігам із заданим взірцем.
@(списо_взірців)
Відповідає одному з заданих взірців.
!(список_взірців)
Відповідає усьому, окрім одного з заданих взірців.

Параметр extglob змінює поведінку обробника, оскільки зазвичай дужки вважаються операторами із синтаксичним значенням. Щоб розширені взірці відповідності було оброблено належним чином, слід увімкнути extglob до обробки конструкцій, що містять ці взірці, включно із функціями оболонки та підставлянням команд.

Під час встановлення відповідності назв файлів параметр оболонки dotglob визначає набір назв файлів, які буде перевірено: якщо параметр dotglob увімкнено, набір назв файлів включає всі файли, що починаються з “.”, but . and .. must be matched by a pattern or sub-pattern that begins with a dot; when it is disabled, the set does not include any filenames beginning with “.” якщо взірець або підвзірець починається з “.”. If the globskipdots shell option is enabled, the filenames . and .. never appear in the set. As above, “.” має спеціальне значення лише при встановленні відповідності назв файлів.

Зіставлення складних розширених взірців із довгими рядками виконується повільно, особливо коли взірці містять чергування, а рядки містять кілька збігів. Використання окремих збігів для коротших рядків або використання масивів рядків замість одного довгого рядка може бути швидшим.

Вилучення лапок

Після попередніх розгортань усі ненейтралізовані послідовності символів \, ' і ", які не були результатом вказаних вище розгортань, буде вилучено.

ПЕРЕСПРЯМОВУВАННЯ

Перш ніж команду буде виконано, її вхід і вихід може бути переспрямовано за допомогою спеціальних позначень, які обробляє оболонка. За допомогою переспрямувань можна дублювати, відкривати, закривати, замінювати на посилання на інші файли дескриптори файлів команди, а також змінювати файли, з яких програма читатиме дані і до яких вона записуватиме дані. Якщо використано разом із вбудованою командою exec, переспрямування вноситимуть зміни до дескрипторів файлів у поточному середовищі виконання оболонки. Описані нижче оператори переспрямовування можуть передувати простій команді, бути розташованими у ній або слідувати за командою. Переспрямування буде оброблено у вказаному у команді порядку, зліва праворуч.

Перед кожним переспрямуванням, перед яким можна вказати номер дескриптора файла, можна також вказати слово у формі {назва-змінної}. У таких випадках, для кожного оператора переспрямування, окрім >&- і <&-, оболонка розмістить у пам'яті дескриптор файла із номером, що перевищує 9, і встановить для нього значення назва-змінної. Якщо перед >&- або <&- буде вказано {назва-змінної}, значення назва-змінної визначить дескриптор файла, який слід закрити. Якщо вказано аргумент {назва-змінної}, переспрямування працюватиме за областю дії команди, що надає змогу програмісту оболонки керувати самим дескриптором файла вручну без використання вбудованої команди exec. Цією поведінкою керує параметр оболонки varredir_close.

У наведених нижче описах, якщо не вказано номера дескриптора файла, і першим символом оператора переспрямування є “<”, термін «переспрямування» стосується стандартного введення (дескриптор файла 0). Якщо першим символом оператора переспрямування є “>”, термін «переспрямування» стосується стандартного виведення (дескриптор файла 1).

Слово, яке слідує за оператором переспрямування у наведених нижче описах, якщо окремо не написано іншого, підлягає розгортанню у дужках, розгортанню тильди, розгортанню параметрів та змінних, заміні команд, арифметичним обчисленням, вилученню нейтралізації, розгортанню шляхів та поділу на слова. Якщо у результаті розгортання буде отримано декілька слів, bash повідомить про помилку.

Порядок переспрямувань має значення. Наприклад, команда

ls > dirlist 2>&1

спрямовує стандартне виведення та стандартне виведення помилок до файла dirlist, а команда

ls 2>&1 > dirlist

спрямовує лише стандартне виведення до файла dirlist, оскільки стандартне виведення помилок було дубльовано зі стандартного виведення до того, як стандартне виведення було переспрямовано до файла dirlist.

Деякі назви файлів при використанні переспрямувань bash обробляє по-особливому, так, як це описано у наведеній нижче таблиці. Якщо операційна система, у якій запущено bash, надає доступ до цих спеціальних файлів, bash скористається ними. Якщо ні, bash емулюватиме їх на внутрішньому рівні, скориставшись поведінкою, яку описано нижче.

/dev/fd/дескриптор_файла
Якщо дескриптор_файла є коректним цілим числом, буде здубльовано дескриптор файла дескриптор_файла.
/dev/stdin
Буде здубльовано дескриптор файла 0.
/dev/stdout
Буде здубльовано дескриптор файла 1.
/dev/stderr
Буде здубльовано дескриптор файла 2.
/dev/tcp/вузол/порт
Якщо вузол є коректною назвою вузла або інтернет-адресою, і порт є цілим числом — номером порту або назвою служби, bash спробує відкрити відповідний сокет TCP.
/dev/udp/вузол/порт
Якщо вузол є коректною назвою вузла або інтернет-адресою, і порт є цілим числом — номером порту або назвою служби, bash спробує відкрити відповідний сокет UDP.

Неможливість відкрити або створити файл спричиняє помилку переспрямовування.

Переспрямовуванням із використанням дескрипторів файлів, номер яких перевищує 9, слід користуватися із обережністю, оскільки вони можуть конфліктувати із дескрипторами, які оболонка використовує на внутрішньому рівні.

Переспрямування введення

Переспрямування вхідних даних призведе до того, що файл, назва якого є результатом розгортання слова, буде відкрито для читання на дескрипторі файла n або на стандартному введенні (файла з дескриптором 0), якщо n не вказано.

Загальний формат для переспрямування вводу такий:

[n]<слово

Переспрямування виведення

Переспрямування виведених даних призведе до того, що файл, назва якого є результатом розгортання слова, буде відкрито для читання на дескрипторі файла n або на стандартному виведенні (файла з дескриптором 1), якщо n не вказано. Якщо файла не існує, його буде створено; якщо він існує, його буде обрізано до нульового розміру.

Загальний формат для переспрямування виводу такий:

[n]>слово

Якщо оператором переспрямування є > і було увімкнено параметр noclobber вбудованої команди set, спроба переспрямовування завершиться помилкою, якщо файл, назву якого буде визначено шляхом розгортання слова, існує і є звичайним файлом. Якщо оператором переспрямування є >| або оператором переспрямування є > і не увімкнено параметр noclobber у вбудованій команді set, bash буде виконано спробу пересрямовування, навіть якщо файл із назвою, яку отримано розгортанням слова, існує.

Дописування переспрямованого виведення

Переспрямування виведення у цей спосіб призведе до того, що файл, назва якого є результатом розгортання слова, буде відкрито для дописування на дескрипторі файла n або на стандартному виведенні (файла з дескриптором 1), якщо n не вказано. Якщо файла не існує, його буде створено.

Загальним форматом для дописування виведення є такий:

[n]>>слово

Переспрямування стандартного виводу та стандартних помилок

Ця конструкція переспрямовує стандартне виведення (дескриптор файла 1), і стандартне виведення помилок (дескриптор файла 2) до файла, чиєю назвою є розгортання слова слово.

Існує два формати переспрямування стандартного виводу та стандартних помилок:

&>слово

і
>&слово

З двох форм пріоритетною є перша. Семантично це еквівалентно до

>слово 2>&1

Якщо використано другу форму, слово не зможе розгорнутися до числа або -. Якщо воно розгортається, з міркувань сумісності застосовуються інші оператори переспрямовування (див. Дублювання дескрипторів файлів).

Дописування стандартного виводу та стандартних помилок

Ця конструкція дописує і до стандартного виведення (дескриптор файла 1), і до стандартного виведення помилок (дескриптор файла 2) до файла, чиєю назвою є розгортання слова слово.

Форматуванням для дописування стандартного виведення і стандартного виведення помилок є таке форматування:

&>>слово

Семантично це еквівалентно до

>>слово 2>&1

(див. Дублювання дескрипторів файлів нижче).

Контекстні документи

Цей тип переспрямовування вказує оболонці, що слід прочитати вхідні дані з поточного джерела, аж до рядка, що містить лише роздільник (без кінцевих пропусків). Згодом, як стандартне джерело вхідних даних (або дескриптор файла n, якщо вказано n) для команди буде використано усі рядки аж до цієї позиції.

Формат контекстних документів:

[n]<<[-]слово

контекстний документ роздільник

Оболонка не виконує розгортання параметрів та змінних, підставляння команд, арифметичного розгортання або розгортання шляхів для слова.

Якщо якусь частину слова слово взято у лапки, роздільником буде результат вилучення лапок зі слова, а рядки контекстного документа не розгортатимуться. Якщо слово не буде взято у лапки, роздільник сам є словом, і сам текст документа буде оброблено подібно до рядка у подвійних лапках: в усіх рядках контекстного документа виконуватиметься розгортання параметрів, заміни команд та арифметичні обчислення, послідовність символів \<новий рядок> буде оброблено буквально, а для нейтралізації символів \, $ і ` слід використовувати \; втім, символи у подвійних лапках не матимуть спеціального значення.

Якщо оператором переспрямовування є <<-, з вхідних рядків буде прибрано початкові табуляції та рядки, що містять роздільник. Це уможливлює належні відступи у рядках контекстного документа у скриптах оболонки.

Якщо роздільник не взято в лапки, послідовність \<newline> розглядається як продовження рядка: два рядки з'єднуються, а зворотна похилу риску із символом нового рядка буде вилучено. Це відбувається під час читання документа, перед перевіркою кінцевого роздільника, тому з'єднані рядки можуть утворювати кінцевий роздільник.

Контекстні рядки

Варіант контекстних документів. Форматування:

[n]<<<слово

Слово підлягає розгортанню тильди, розгортанню параметрів і змінних, заміні команд, арифметичним обчисленням та вилученню нейтралізації. Розгортання шляхів і поділ на слова не виконуватимуться. Результат буде надано як єдиний рядок із додаванням наприкінці символу нового рядка до команди у її стандартне джерело вхідних даних (або у файл з дескриптором n, якщо вказано n).

Дублювання дескрипторів файлів

Оператор переспрямовування

[n]<&слово

використовують для дублювання дескрипторів файлів вхідних даних. Якщо слово розгортається до однієї або декількох цифр, дескриптор файла із позначенням n стане копією цього дескриптора файла. Якщо цифри у слові не задають дескриптор файла, який відкрито для введення даних, станеться помилка переспрямування. Якщо обчисленим значенням слова є -, дескриптор файла n буде закрито. Якщо n не вказано, буде використано стандартне джерело вхідних даних (файл із дескриптором 0).

Оператор

[n]>&слово

використовують у подібний спосіб для дублювання дескрипторів файлів виведення. Якщо не вказано n, буде використано стандартне виведення (файл із дескриптором 1). Якщо цифри у слові не задають дескриптора файла, який відкрито для виведення, станеться помилка переспрямування. Якщо обчисленим значенням слова є -, файл із дескриптором n буде закрито. У особливому випадку, якщо не вказано n, і розгортанням слова не є одна або декілька цифр або -, стандартне виведення і стандартне виведення помилок буде переспрямовано у описаний раніше спосіб.

Пересування дескрипторів файлів

Оператор переспрямовування

[n]<&цифра-

пересуває дескриптор файла цифра до дескриптора файла n або стандартного джерела вхідних даних (дескриптор файла 0), якщо n не вказано. цифра буде закрито після дублювання до n.

Так само, оператор переспрямовування

[n]>&цифра-

пересуває дескриптор файла цифра до дескриптора файла n або стандартного виведення (дескриптор файла), якщо n не вказано.

Відкриття дескрипторів файлів для читання і запису

Оператор переспрямовування

[n]<>слово

спричиняє відкриття файла, чия назва визначається розгортанням слова слово, для читання і запису на дескрипторі файла n або відкриття дескриптора файла 0, якщо n не вказано. Якщо файла не існує, його буде створено.

АЛЬТЕРНАТИВИ

За допомогою альтернатив можна замінити рядок на слово, якщо рядок використано як перше слово простої команди. В оболонці передбачено список альтернатив, які можна встановити або скасувати за допомогою вбудованих команд alias і unalias (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Якщо оболонка зчитує слово без лапок у правильній позиції, вона перевіряє, чи відповідає воно альтернативній назві. Якщо збіг встановлено, оболонка замінює слово значенням альтернативи та зчитує це значення так, ніби його було прочитано замість слова. Оболонка не перевіряє жодні символи після слова, перш ніж спробувати підставити альтернативну назву.

У назві альтернативи не можна використовувати символи /, $, ` та =, а також будь-які метасимволи або оболонки або символи нейтралізації, список яких наведено вище. Текст заміни може містити будь-які коректні вхідні дані оболонки, зокрема метасимволи оболонки. Перше слово тексту заміни буде перевірено на належність до альтернатив, але слово, яке збігається із альтернативою, яка розгортається, не буде розгорнуто вдруге. Це означає, що можна, наприклад, використати альтернативу ls для ls -F, і bash не намагатиметься рекурсивно розгортати текст заміни.

Якщо останній символ значення альтернативи є пропуском, наступне слово команди за альтернативою також буде перевірено на можливість розгортання альтернативи.

Альтернативи можна створити або переглянути за допомогою команди alias. Вилучити альтернативи можна за допомогою команди unalias.

Механізму використання аргументів у тексті заміни не передбачено. Якщо потрібні аргументи, скористайтеся замість нього функцією оболонки (див. ФУНКЦІЇ нижче).

Розгортання альтернатив не виконуватиметься для неінтерактивної оболонки, якщо не встановлено параметра оболонки expand_aliases за допомогою shopt (див. опис shopt у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Правила, які стосуються визначення і використання альтернатив, є дещо заплутаними. Bash завжди читає принаймні один повний рядок вхідних даних і усі рядки, з яких складається складена команда, перш ніж виконувати будь-яку команду у цьому рядку або складену команду. При читанні, а не при виконанні, команди альтернативи буде розгорнуто. Тому визначення альтернативи у тому самому рядку, що і інша команда, не працюватиме до читання наступного рядка вхідних даних, а визначення альтернативи у складеній команді не працюватимуть до моменту обробки і виконання оболонкою усієї команди. Нові альтернативи не буде використано у командах, які слідують за визначенням альтернативи в одному рядку або у решті складеної команди. Така поведінка може також стати проблемою при виконанні функцій. Розгортання альтернатив відбуватиметься при читанні визначення функцій, а не при виконанні функцій, оскільки визначення функції саме є командою. Як наслідок, альтернативи, які визначено у функції, є недоступними до виконання цієї функції. Щоб уникнути проблем, завжди визначайте альтернативи в окремому рядку і не використовуйте alias у складених командах.

Майже усюди слід віддавати перевагу перед альтернативами функціям оболонки.

ФУНКЦІЇ

У функції оболонки, яку визначено у описаний вище у розділі ГРАМАТИКА ОБОЛОНКИ спосіб, зберігається послідовність команд, яку можна будь-коли виконати. Якщо використати назву функції як назву простої команди, оболонкою буде виконано список команд, які пов'язано із цією функцією. Функції буде виконано у контексті оболонки виклику; система не створюватиме процес для їхньої обробки (на відміну від виконання скрипту оболонки).

Під час виконання функції аргументами будуть позиційні параметра на момент виконання. Для відтворення зміни буде оновлено спеціальний параметр #. Спеціальний параметр 0 лишиться незмінним. Для першого елемента змінної FUNCNAME на час виконання функції буде встановлено значення назви функції.

Усі інші аспекти середовища виконання оболонки є однаковими для функції і скрипту, з якого її викликано, із такими винятками: пастки DEBUG і RETURN (див. опис вбудованої команди trap у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче) не буде успадковано, якщо функції не передано атрибут trace (див. опис вбудованої команди declare нижче) або не буде увімкнено параметр оболонки -o functrace за допомогою вбудованої команди set (у цьому випадку усі функції успадкують пастки DEBUG і RETURN), а пастку ERR не буде успадковано, якщо не увімкнено параметр оболонки -o errtrace.

Змінні, локальні для функції, оголошують за допомогою вбудованої команди local (локальні змінні). Зазвичай змінні та їх значення спільні між функцією та її викликачем. Якщо змінну було оголошено як local, область видимості змінної буде обмежено відповідною функцією та її дочірніми (включно із функціями, які вона викликає).

У наведеному нижче описі поточною областю видимості є функція, виконання якої відбувається у поточний момент часу Попередні області видимості складаються з функції, з якої викликано цю функцію, та попередніх функцій у стосі викликів, аж до “global” області видимості, де оболонка не виконує жодної функції оболонки. Локальною змінною у поточній області видимості є змінна, яку оголошено за допомогою вбудованих команд local або declare у функції, виконання якої відбувається у поточний момент.

Локальні змінні “shadow” Локальні змінні «затіняють» змінні із тими самими назвами, які оголошено у попередніх областях видимості. Наприклад, локальна змінна, яку оголошено у функції, приховує змінну із тією самою назвою, яку оголошено у попередніх областях, зокрема загальні змінні: посилання та встановлення значень стосуватимуться локальної змінної, а загальна змінні у попередніх областях видимості лишаться незмінними. При поверненні з функції загальна змінна знову стає видимою.

Оболонка використовує динамічне визначення областей видимості для керування видимістю змінних у функціях. При динамічному визначенні перелік видимих змінних та їхні значення є результатом послідовності викликів функцій, яка спричинила досягнення у процесі виконання поточної функції. Значення змінної, яке бачить функція, залежить від її значення у місці виклику, якщо таке визначено, того, перебуває місце виклику у «загальній» області видимості чи у іншій функції оболонки. Також, це значення, яке «затіняє» локальне оголошення змінної, і значення, яке відновлено при поверненні з функції.

Наприклад, якщо змінну змінна оголошено як локальну у функції функція1, і функція функція1 викликає іншу функцію функція2, посилання на змінна, які використано у функція2, дадуть локальну змінну змінна з функція1, яка затіняє будь-яку загальну змінну із назвою змінна.

Вбудована команда unset також працює з використанням тієї самої динамічної області видимості: якщо змінна є локальною для поточної області видимості, unset скасує встановлення значення для неї; якщо ж ні, скасування значення стосуватиметься змінної, яку виявлено у будь-якій області видимості, звідки викликано функцію, як це описано вище. Якщо значення змінної у поточній локальній області видимості не встановлено, нічого не зміниться (виглядатиме як невстановлена), аж доки значення у відповідній області видимості не буде встановлено або не буде виконано повернення з функції. Щойно буде виконано повернення з функції, будь-який екземпляр змінної у попередній області видимості стане видимим. Якщо скасування встановлення значення спрацює для змінної у попередній області видимості, будь-який екземпляр змінної із тією самою назвою, який було затінено, стане знову видимим (див. нижче щодо того, як змінна оболонки localvar_unset змінює цю поведінку).

Змінна FUNCNEST, якщо встановлено числове додатне значення, визначає максимальний рівень вкладеності функцій. Виклики функцій, у яких перевищено обмеження, призводять до аварійного завершення виконання усієї команди.

Якщо у функції буде виконано вбудовану команду return, виконання функції буде завершено і оболонка перейде до виконання наступної після виклику функції команди. Якщо return має числовий аргумент, це стан повернення функції; інакше стан повернення функції дорівнює стану виходу останньої команди, виконаної перед return. Перед поновленням виконання буде виконано усі команди, які пов'язано із пасткою RETURN. Під час завершення роботи функції буде відновлено значення, які мали перед виконанням функції усі позиційні параметри та особливий параметр #.

Отримати список назв і визначень функцій можна за допомогою параметра -f вбудованих команд declare і typeset. Використання параметра -F вбудованих команд declare і typeset призведе до виведення списку лише назв функцій (і, необов'язково, файла-джерела та номера рядка, якщо увімкнено параметр оболонки extdebug). Функції можна експортувати так, щоб їх було автоматично визначено у дочірніх процесах оболонки (процесах, які створено під час виконання окремих викликів оболонки), — скористайтеся параметром -f вбудованої команди export. Визначення функції можна вилучити за допомогою параметра -f вбудованої команди unset.

Функції можуть бути рекурсивними. Для обмеження глибини стека викликів функції та кількості викликів функцій можна скористатися змінною FUNCNEST. Типово, обмежень на кількість рекурсивних викликів у bash не накладається.

АРИФМЕТИЧНЕ ОЦІНЮВАННЯ

Оболонка, за певних умов, уможливлює арифметичні обчислення за певних обставин (див. вбудовані команди let і declare, складену команду ((, арифметичну команду for, команду умови [[ та Арифметичні обчислення).

Обчислення буде виконано у цілих числах найширшого типу із фіксованою шириною без перевірок на переповнення, хоча ділення на 0 буде перехоплено із повідомленням про помилку. Оператори, їхня пріоритетність, асоціативність та значення є тими самими, що і у мові C. Нижче наведено список операторів, які згруповано за рівнями рівної пріоритетності. Рівні у списку впорядковано за спаданням пріоритетності.

післяінкремент і післядекремент змінної
++ідентифікатор --ідентифікатор
доінкремент та додекремент змінної
- +
унарні мінус та плюс
! ~
логічне та порозрядне заперечення
**
піднесення до степеня
* / %
множення, ділення, залишок ділення
+ -
додавання, віднімання
<< >>
лівий та правий порозрядний зсув
<= >= < >
порівняння
== !=
рівність та нерівність
&
бітова «І»
^
порозрядне виключне АБО
|
бітове «АБО»
&&
логічне «І»
||
логічне «АБО»
умовний оператор
= *= /= %= += -= <<= >>= &= ^= |=
присвоювання
кома

Змінні оболонки можна використовувати як операнди; буде виконано розгортання параметрів до обчислення виразу. У виразі на змінні оболонки можна посилатися за назвою без використання синтаксису розгортання параметрів. Це означає, що ви можете використовувати «x», де x — це назва змінної оболонки,в арифметичному виразі, і оболонка обчислить його значення як вираз і використає результат. Замість змінної оболонки, яка має порожнє значення або не встановлена, буде використано 0, якщо посилання на неї за назвою буде використано у виразі.

Значення змінної буде обчислено як арифметичний вираз при посиланні на неї, або коли змінній, якій було надано атрибут integer за допомогою declare -i буде надано значення. Порожнє значення відповідає 0. Для використання у виразі для змінної оболонки не обов'язково має бути увімкнено атрибут integer.

Цілі сталі має бути визначено з використанням синтаксису визначення мови C без суфіксів або символьних сталих. Сталі з початковим 0 буде оброблено як вісімкові числа. Початковий рядок 0x або 0X позначає шістнадцяткове число. У всіх інших випадках, числа записують у формі [основа#]n, де необов'язковою частиною основа є десяткове число від 2 до 64, яке означає основу числення, а n — число у цій основі числення. Якщо рядок основа# не вказано, буде використано основу числення 10. При заданні n, якщо треба використати цифри, які не є десятковими, цифри після 9 слід вказувати як малі літери, великі літери, @ і _, саме у такому порядку. Якщо основа є числом, яке менше або рівне 36, можна використовувати як малі, так і великі літери для позначення цифр зі значеннями від 10 до 35.

Виконання операторів відбувається за пріоритетністю. Підвирази у дужках буде обчислено першими. Виразами у дужках можна скористатися для зміни описаних вище правил пріоритетності.

УМОВНІ ВИРАЗИ

Умовні вирази використовують у складених командах [[ та вбудованих командах test і [ для перевірки атрибутів файла і виконання рядкових і арифметичних порівнянь. Поведінка команд test і [ визначається кількістю їхніх аргументів; див. опис цих команд, щоб дізнатися про інші, специфічні для них, дії.

Вирази формуються з унарних або бінарних основ, перелічених нижче. Унарні вирази часто використовуються для перевірки стану файла або змінної оболонки. Бінарні оператори використовуються для порівняння рядків, чисел та атрибутів файлів.

Bash handles several filenames specially when they are used in expressions. If the operating system on which bash is running provides these special files, bash will use them; otherwise it will emulate them internally with this behavior: If any file argument to one of the primaries is of the form /dev/fd/n, then bash checks file descriptor n. If the file argument to one of the primaries is one of /dev/stdin, /dev/stdout, or /dev/stderr, bash checks file descriptor 0, 1, or 2, respectively.

Якщо про це окремо не зауважено, у базових частинах, які працюють з файлами, буде виконано перехід за символічними посиланнями та оброблено файл, на який виконано посилання, а не саме посилання.

Якщо використано [[ або якщо оболонка працює у режимі posix, оператори < і > лексикографічно упорядковуватимуться з використанням порядку поточної локалі. Якщо оболонка не працює у режимі posix, команда test упорядковує за порядком символів в ASCII.

Істина, якщо файл існує.
Істина, якщо файл існує і є спеціальним блоковим файлом.
Істина, якщо файл існує і є спеціальним символьним файлом.
Істина, якщо файл існує і є каталогом.
Істина, якщо файл існує.
Істина, якщо файл існує і є звичайним файлом.
Істина, якщо файл існує і має встановленим біт групи.
Істина, якщо файл існує і є символічною ланкою.
Істина, якщо файл існує і встановлено біт “sticky” .

Істина, якщо файл існує і є іменованим каналом (FIFO).
Істина, якщо файл існує і є придатним до читання.
Істина, якщо файл існує і має ненульовий розмір.
Істина, якщо дескриптор файлу дескриптор_файла відкритий і вказує на термінал.
Істина, якщо файл існує і має встановленим біт встановити-ІД-користувача.
Істина, якщо файл існує і в нього можна писати.
Істина, якщо файл існує і є виконуваним.
Істина, якщо файл існує і його власником є чинний ІД групи.
Істина, якщо файл існує і є символічною ланкою.
Істина, якщо файл існує та був змінений після останнього доступу.
Істина, якщо файл існує і його власником є чинний ІД користувача.
Істина, якщо файл існує і є сокетом.
Істина, якщо увімкнено параметр оболонки назва_параметра. Див. список параметрів під описом параметра -o вбудованої команди set нижче.
True, якщо встановлено змінну оболонки назва_змінної ​​(їй було надано значення). Якщо назва_змінної — це індексована змінна масиву з індексом @ або *, буде повернуто true, якщо масив має будь-які елементи зі встановленим значенням. Якщо назва_змінної — це асоціативна змінна масиву з індексом @ або *, буде повернуто true, якщо значення елемента із цим ключем встановлено.
Істина, якщо змінну оболонки назва_змінної встановлено і вона є посиланням на назву.
Істина, якщо довжина рядка рядок є нульовою.
рядок
Істина, якщо довжина рядка рядок є ненульовою.
рядок1 == рядок2
рядок1 = рядок2
Істина, якщо рядки є однаковими. Для сумісності із POSIX слід використовувати = у команді test. Якщо використано із командою [[, буде виконано встановлення відповідності взірцю, як це описано вище (складені команди).
рядок1 != рядок2
Істина, якщо рядки не є рівними.
рядок1 < рядок2
Істина, якщо рядок1 стоїть вище за рядок2 при лексикографічному упорядковуванні.
рядок1 > рядок2
Істина, якщо рядок1 стоїть нижче за рядок2 при лексикографічному упорядковуванні.
файл1 -ef файл2
Істина, якщо файл1 і файл2 є посиланнями на той самий пристрій або номер inode.
файл1 -nt файл2
Істина, якщо файл1 є новішим (за даною внесених змін) за файл2, або якщо файл1 існує, а файл2 — ні.
файл1 -ot файл2
Істина, якщо файл1 є старішим за файл2, або якщо файл2 існує, а файл — ні.
аргумент1 OP аргумент2
OP є одним із таких операторів: -eq, -ne, -lt, -le, -gt або -ge. Ці арифметичні бінарні оператори повертаю значення «істина», якщо аргумент1 є рівним, не рівним, меншим, меншим або рівним, більшим або більшим або рівним за аргумент2, відповідно. Аргумент1 і аргумент2 мають бути додатними або від'ємними цілими числами. При використанні у команді [[, аргумент1 і аргумент2 буде обчислено як арифметичні вираз (див. АРИФМЕТИЧНІ ОБЧИСЛЕННЯ вище). Оскільки розгортання, яке виконує команда [[ над аргументом1 та аргументом2, потенційно може призвести до порожніх рядків, арифметичне обчислення виразів розглядає такі вирази як вирази, що дорівнюють 0.

РОЗГОРТАННЯ ПРОСТИХ КОМАНД

При виконання простих команд оболонка виконує вказані нижче розгортання, встановлення значень та переспрямування, зліва праворуч, у вказаному нижче порядку.

1.
Слова, які обробник позначив як надання змінним значень (які передують назві команди), і переспрямування буде збережено для подальшої обробки.
2.
Слова, які не є встановленнями значень змінних або переспрямуваннями буде розгорнуто. Якщо після розгортання лишаться якісь слова, перше слово вважатиметься назвою команди, а решта слів — її аргументами.
3.
Переспрямовування виконуватиметься так, як це описано вище у розділі ПЕРЕСПРЯМУВАННЯ.
4.
Текст після = у всіх встановленнях значень змінної підлягає розгортанню тильди, розгортанню параметрів, заміні команд, арифметичним обчисленням та вилученню нейтралізації, перш ніж його буде призначено до зміннної.

Якщо назви команди не отримано, присвоєння значень змінним впливають на поточне середовище оболонки. У випадку такої команди (яка складається лише з інструкцій надання значення та переспрямувань), інструкції з надання значень буде виконано перед переспрямуваннями. В іншому випадку змінні додаються до середовища виконуваної команди і не впливають на поточне середовище оболонки. Якщо будь-яке з присвоєнь намагається присвоїти значення змінній лише для читання, виникає помилка, і команда завершується із ненульовим станом.

Якщо назви команди не отримано, перенаправлення виконуються, але не впливають на поточне середовище оболонки. Помилка переспрямування призводить до завершення команди з ненульовим станом.

Якщо після розширення залишилася назва команди, виконання продовжується, як описано нижче. В іншому випадку команда завершується. Якщо одне з розширень містило заміну команди, стан виходу команди такий, як стан виходу останньої виконаної заміни команди. Якщо заміни команд не було, команда виходить зі станом нуль.

ВИКОНАННЯ КОМАНД

Після поділу команди на слова, якщо результат є простою командою і необов'язковим списком аргументів, оболонка виконає описані нижче дії.

Якщо назва команди не містить похилих рисок, оболонка намагається знайти її. Якщо існує функція оболонки з такою назвою, ця функція викликається, як описано вище в ФУНКЦІЇ. Якщо назва не відповідає функції, оболонка шукає її у списку вбудованих команд оболонки. Якщо збіг знайдено, буде викликано цю вбудовану команду.

Якщо назва не є ні функцією оболонки, ні вбудованою командою, і не містить похилих рисок, bash шукає серед елементів PATH каталог, що містить виконуваний файл з такою назвою. Bash для запам'ятовування повних назв виконуваних файлів використовує геш-таблицю (див. нижче геш під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ). Повний пошук у каталогах із PATH виконується лише тоді, коли команду не знайдено в геш-таблиці. Якщо пошук невдалий, оболонка шукає визначену функцію оболонки під назвою command_not_found_handle. Якщо така функція існує, вона викликається в окремому середовищі виконання, отримавши, як аргументи, початкову команду та її аргументи, а стан виходу функції стає станом виходу цієї підоболонки. Якщо цю функцію не визначено, оболонка друкує повідомлення про помилку та повертає стан виходу 127.

Якщо пошук пройшов успішно, або якщо назва команди містить одну чи кілька похилих рисок, оболонка виконує названу програму в окремому середовищі виконання. Аргумент 0 стає рівним зазначеній назві, а решта аргументів команди — наданим аргументам, якщо такі є.

Якщо це виконання не вдається, оскільки файл не виконуваного формату і не є каталогом, вважається, що це скрипт оболонки, файл, що містить команди оболонки, і оболонка створює новий екземпляр самої себе для виконання. Bash намагається визначити, є файл текстовим чи двійковим, і не виконує файлів, які буде визначено як двійкові. Ця підоболонка повторно ініціалізується, так що результат виглядає так, ніби для обробки скрипту викликано нову оболонку, за винятком того, що розташування команд, які запам'ятав предок (див. нижче геш під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ), зберігає нащадок.

Якщо програма є файлом, що починається з #!, залишок першого рядка визначає інтерпретатор для програми. Оболонка виконує зазначений інтерпретатор в операційних системах, які самі не обробляють файлів цього виконуваного формату. Аргументами інтерпретатора є один необов’язковий аргумент після назви інтерпретатора в першому рядку програми, за яким йде назва програми, а потім - аргументи команди, якщо такі є.

СЕРЕДОВИЩЕ ВИКОНАННЯ КОМАНД

Оболонка має середовище виконання, яке складається з таких компонентів:

  • Відкриті файли, які успадковано оболонкою на момент виклику із модифікаціями з використанням переспрямувань, які передано вбудованій команді exec
  • Поточний робочий каталог, який встановлено командами cd, pushd або popd чи успадковано оболонкою на момент виклику.
  • Маска режиму створення файлів, яку встановлено за допомогою umask або успадковано від батьківського процесу оболонки.
  • Поточні пастки, які встановлено за допомогою trap.
  • Параметри оболонки, які встановлено наданням значень змінним або за допомогою команди set чи успадковано від батьківського процесу оболонки у середовищі.
  • Функції оболонки, які визначено під час виконання або успадковано від батьківського процесу оболонки у середовищі.
  • Параметри, які увімкнено на момент виклику (типово або за допомогою аргументів рядка команди) або встановлено за допомогою команди set.
  • Параметри, які вмикають за допомогою shopt.
  • Альтернативи оболонки, які визначено за допомогою alias.
  • Ідентифікатори різноманітних процесів, зокрема процесів фонових завдань, значення $$ і значення PPID.

Коли виконується проста команда, відмінна від вбудованої команди або функції оболонки, її викликають в окремому середовищі виконання, яке складається із описаних нижче компонентів. Якщо це не вказано окремо, значення успадковуються від оболонки.

  • Відкриті файли оболонки разом із усіма змінами і додаваннями, які визначено переспрямуваннями команди.
  • Поточна робоча тека.
  • Маска режиму створення файлів.
  • Змінні оболонки і функції, які позначено для експортування, разом зі змінними, які експортовано для команди, які передано у середовищі.
  • Пастки, перехоплені оболонкою, скидаються до значень, успадкованих від батьківської оболонки, а пастки, знехтувані оболонкою, нехтуються.

Команда, яку викликано у цьому окремому середовищі, не може впливати на середовище виконання оболонки.

Підоболонка є копією процесу оболонки.

Заміна команд, команди, згруповані в дужках, і асинхронні команди викликаються в середовищі підоболонки, яке є дублікатом середовища оболонки, за винятком того, що пастки, перехоплені оболонкою, скидаються до значень, успадкованих оболонкою під час виклику від свого предка. Вбудовані команди, які викликаються як частина конвеєра, окрім, можливо, останнього елемента, залежно від значення параметра оболонки lastpipe, також виконуються в середовищі підоболонки. Зміни, внесені в середовище підоболонки, не можуть вплинути на середовище виконання оболонки.

Якщо оболонка працює у режимі posix, підоболонки, створені для виконання заміни команд, успадковують значення параметра -e від батьківської оболонки. Якщо оболонка не працює у режимі posix, bash у таких підоболонках очищає параметр -e. Див. опис параметра оболонки inherit_errexit нижче, щоб дізнатися, як керувати цією поведінкою, якщо оболонка не працює у режимі POSIX.

If a command is followed by a & and job control is not active, the default standard input for the command is the empty file /dev/null. Otherwise, the invoked command inherits the file descriptors of the calling shell as modified by redirections.

СЕРЕДОВИЩЕ

При виклику програми їй буде передано маси рядків, який називається середовище. Це список пар назва-значення у такій формі:назва=value.

Оболонка надає декілька способів керування середовищем. При виклику оболонка сканує власне середовище і створює параметр для кожної знайденої назви, автоматично позначаючи його для експортування до дочірніх процесів. Виконувані команди успадковують це середовище. Змінювати середовище додаванням або вилученням параметрів і функцій можна за допомогою команд export, declare -x і unset. Якщо буде внесено зміни до значення параметра у середовищі, нове значення автоматично стане частиною середовища, замінивши собою старе. Середовище, успадковане будь-якою виконуваною командою, складається з початкового середовища оболонки, чиї значення може бути змінено в оболонці, без усіх пар, які вилучено командою unset, і з усіма додаванням за допомогою команд unset і export -n.

Якщо будь-які надання значення параметрам, як описано вище у розділі щодо PARAMETERS, з'являються перед простою командою, надання змінним значення є частиною середовища цієї команди, поки вона виконується. Ці оператори надання значень впливають лише на середовище, яке бачить ця команда. Якщо ці надання значень передують виклику функції оболонки, змінні є локальними для функції і експортуються до дочірніх об'єктів цієї функції.

Якщо встановлено параметр -k (див. вбудовану команду set нижче), до середовища команди потраплять усі, а не лише ті, які передують назві команди, надання параметрам значень.

Якщо bash викликає зовнішню команду, для змінної _ буде встановлено значення повної назви файла команди. Цю змінну також буде передано команді у її середовищі.

СТАН ВИХОДУ

Станом виходу виконуваної команди буде значенням, яке повернуто системним викликом waitpid або еквівалентною функцією. Діапазоном станів виклику є множина цілих чисел від 0 до 255. Втім, яке це описано нижче, значення, що перевищують 125, можуть використовуватися оболонкою зі спеціальною метою. Значення станів виходу для вбудованих функцій оболонки та складених команд також обмежено цим діапазоном. За певних умов, оболонка використовуватиме спеціальні значення для того, щоб повідомити про певні режим помилок.

З точки зору оболонки, команду, яка завершує роботу із нульовим станом виходу, виконано успішно. Отже, нульовий стан виходу вказує на успіх, а ненульовий стан виходу вказує на помилку.

Якщо роботу команди завершено із критичним сигналом N, bash використовує як код стану виходу значення 128+N.

Якщо певну програму не буде знайдено, дочірній процес, який було створено для її виконання, повертає код стану 127. Якщо програму буде знайдено, але її не можна виконати, кодом стану виходу буде 126.

Якщо виконання команди завершується помилкою через помилку під час розгортання або переспрямування, код стану виходу буде більшим за нуль.

Вбудовані команди оболонки повертають стан виходу 0 (істина), якщо їх виконано успішно, і ненульовий стан виходу (хибність), якщо під час виконання станеться помилка. Усі вбудовані команди повертають стан виходу 2, якщо потрібно вказати на неправильне використання, — загалом, неправильне визначення параметрів або пропущені аргументи.

Доступ до стану виходу останньої команди можна здійснювати за допомогою спеціального параметра $?.

Сама оболонка bash повертає стан виходу останньої виконаної команди, якщо не буде виявлено синтаксичної помилки. Якщо помилку буде виявлено, стан виходу буде ненульовим. Див. також опис вбудованої команди exit нижче.

СИГНАЛИ

Якщо bash працює в інтерактивному режимі і не використано жодних пасток, оболонка ігноруватиме SIGTERM (отже, kill 0 не завершує роботи інтерактивної оболонки) і перехоплюватиме та оброблятиме SIGINT (отже, не можна перервати вбудовану команду wait). Якщо bash отримує SIGINT, оболонка виходить з будь-яких циклів виконання. В усіх випадках bash ігноруватиме SIGQUIT. Якщо задіяно керування завданнями, bash ігноруватиме SIGTTIN, SIGTTOU та SIGTSTP.

Вбудована команда trap змінює обробку сигналів оболонкою, як це описано нижче.

Невбудовані команди, які виконує bash, мають обробники сигналів, встановлені на значення, успадковані оболонкою від її предка, якщо trap не встановлює їхнє ігнорування, і в такому разі дочірній процес також ігноруватиме їх. Коли керування завданнями не діє, асинхронні команди нехтують SIGINT і SIGQUIT на додаток до цих успадкованих обробників. Команди, що виконуються внаслідок підміни команд, нехтують сигнали керування завданнями SIGTTIN, SIGTTOU і SIGTSTP.

Типово вихід з оболонки відбувається після отримання SIGHUP. Перед виходом інтерактивна оболонка повторно надсилає SIGHUP усім запущеним або зупиненим завданням. Зупиненим завданням оболонка надсилає SIGCONT, щоб переконатися, що вони отримують SIGHUP (див. JOB CONTROL нижче, щоб дізнатися більше про запуск і зупинення завдань). Щоб оболонка не надсилала сигнал певному завданню, його слід видалити з таблиці завдань вбудованою командою disown (див. нижче ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ) або позначити, що воно не має отримувати SIGHUP, за допомогою disown -h.

Якщо параметр оболонки huponexit встановлено за допомогою shopt, то, коли інтерактивна оболонка для входу завершує роботу, bash надсилає всім завданням SIGHUP.

Якщо bash очікує завершення команди і отримує сигнал, для якого встановлено пастку, пастка не буде виконана, доки команда не завершиться. Коли bash очікує на асинхронну команду через вбудовану команду wait, прийняття сигналу, для якого встановлено пастку, призведе до негайного повернення зі вбудованої команди wait зі станом виходу більшим від 128, одразу після чого буде виконано пастку.

Якщо керування завдань не увімкнено, і bash очікує на завершення роботи головної команди, оболонка отримує створені клавіатурою сигнали, зокрема SIGINT (зазвичай, породженим ^C), які користувачі, зазвичай, мають надсилати команді. Таке трапляється, оскільки оболонка і команда перебувають у тій самі групі процесів, що і термінал, і ^C надсилає SIGINT усім процесам у цій групі процесів. Оскільки bash не вмикає типово керування завданнями, коли оболонка не є інтерактивною, цей сценарій найчастіше зустрічається в неінтерактивних оболонках.

Якщо увімкнено керування завданнями, а bash очікує на завершення команди переднього плану, оболонка не отримує сигнали, які надсилає клавіатура, оскільки вона не перебуває у тій самій групі процесів, що й термінал. Цей сценарій найчастіше зустрічається в інтерактивних оболонках, де bash намагається типово ввімкнути керування завданнями. Див. JOB CONTROL нижче, щоб дізнатися більше про групи процесів.

Якщо bash працює без увімкненого керування завданнями і отримує SIGINT під час очікування на завершення основної команди, програма очікує, аж доки основна команда завершить роботу, а потім вирішує, що робити із SIGINT:

1.
Якщо виконання команди переривається сигналом SIGINT, bash вважатиме, що користувач також мав намір надіслати SIGINT до оболонки і реагує на SIGINT (наприклад, запускаючи перехоплення SIGINT, виходячи з неінтерактивної оболонки або повертаючись на верхній рівень для читання нової команди).
2.
Якщо команда не завершить роботу через надсилання SIGINT, програма обробила SIGINT самостійно і не вважала цей сигнал критичним. У цьому випадку bash також не вважатиме SIGINT критичним сигналом, а припускатиме, що SIGINT було використано як частину звичайної процедури роботи програми (наприклад, emacs використовує його для переривання редагування команд) або його було спеціально відкинуто. Втім, bash запустить будь-яку пастку, яку встановлено на SIGINT, як програма це робить для будь-якого іншого сигналу з пасткою, який вона отримує під час очікування на завершення основної команди, для сумісності.

Якщо увімкнено керування завданнями, bash не отримує сигнали, які надсилає клавіатура, зокрема SIGINT, поки очікує на команду переднього плану. Інтерактивна оболонка не звертає уваги на SIGINT, навіть якщо в результаті цього команда переднього плану завершується, окрім відмітки стану її завершення. Якщо оболонка не є інтерактивною, і команда переднього плану завершується через SIGINT, bash вдає, що сама отримала SIGINT (сценарій 1 вище), для сумісності.

КЕРУВАННЯ ЗАВДАННЯМИ

Керування завданнями означає можливість вибірково зупиняти (призупиняти) виконання процесів і продовжувати (поновлювати) їх виконання пізніше. Користувач зазвичай використовує цю можливість через інтерактивний інтерфейс, що надається разом драйвером терміналу ядра операційної системи та bash.

Оболонка асоціює завдання з кожним конвеєром. Вона зберігає таблицю поточних виконуваних завдань, список яких можна вивести за допомогою команди jobs. Кожне завдання має номер завдання, який jobs показує в дужках. Номери завдань починаються з 1. Коли bash запускає завдання асинхронно (на тлі), буде виведено рядок такого вигляду:

[1] 25647

який означає, що це завдання має номер 1 і ID останнього процесу в конвеєрі, пов’язаного з цим завданням 25647. Усі процеси в одному конвеєрі є членами одного завдання. Bash використовує абстракцію завдання як основу для керування завданнями.

Для полегшення реалізації інтерфейсу користувача для керування завданнями кожен процес має ідентифікатор групи процесів, а операційна система підтримує позначення поточного ідентифікатора групи процесів термінала. Цей ідентифікатор групи процесів термінала пов'язаний з керівним терміналом.

Процеси, що мають однаковий ідентифікатор групи процесів, називаються частиною однієї й тієї ж групи процесів. Учасники групи процесів переднього плану (процеси, чий ідентифікатор групи процесів дорівнює поточному ідентифікатору групи процесів термінала) отримують генеровані клавіатурою сигнали, такі як SIGINT. Кажуть, що процеси групи процесів переднього плану називають процесами переднього плану. Фонові процеси – це процеси, ідентифікатор групи яких відрізняється від терміналу; такі процеси захищені від сигналів, що генеруються клавіатурою. Лише процесам переднього плану дозволяється читати з або, якщо це вказує користувач за допомогою “stty tostop”, , записувати в термінал. Система надсилає сигнал SIGTTIN (SIGTTOU) фоновим процесам зі спробою читання (запису, якщо діє “tostop” ) термінала, який, якщо його не перехоплено, призупиняє роботу процесу

Якщо операційна система, на якій запущено bash, підтримує керування завданнями, bash надає можливість це робити. Введення символу призупинення (зазвичай ^Z, Control-Z) під час виконання процесу призводить до зупинки цього процесу та повернення керування bash. Введення символу відкладеного призупинення (зазвичай ^Y, Control-Y) призводить до зупинення процесу, коли він намагається прочитати вхідні дані з терміналу, і повернення керування до bash. Потім користувач може маніпулювати станом цього завдання, використовуючи команду bg, щоб продовжити його у фоновому режимі, команду fg, щоб продовжити її на передньому плані, або команду kill, щоб його знищити. Символ призупинення набуває чинності негайно s має додатковий побіжний ефект – відкидання будь-якого очікуваного виведення та попереднього введення. Щоб примусово зупинити фоновий процес або зупинити процес, не пов'язаний з поточним сеансом термінала, надішліть йому сигнал SIGSTOP за допомогою kill.

Існує декілька способів посилання на завдання в оболонці. Символ % впроваджує специфікацію завдання (jobspec).

Замість номера завдання n можна використовувати %n. На завдання також можна посилатися за допомогою префікса назви, яку було використано для його запуску, або за допомогою підрядка, який є частиною його рядка команди. Наприклад, %ce посилається на завдання, назва команди якого починається з ce. Використання %?ce, з іншого боку, посилається на будь-яке завдання, що містить рядок ce у рядку своєї команди. Якщо префікс або підрядок відповідає кільком завданням, bash повідомляє про помилку.

Символи %% та %+ посилаються на поточне завдання оболонки. Одинарний знак % (без супровідної специфікації завдання) також посилається на поточне завдання. %- посилається на попереднє завдання. Коли завдання запускається у фоновому режимі, завдання зупиняється на передньому плані або завдання відновлюється у фоновому режимі, воно стає поточним завданням. Завдання, яке було поточним завданням, стає попереднім завданням. Коли поточне завдання завершується, попереднє завдання стає поточним завданням. Якщо є лише одне завдання, %+ та %- можна використовувати для позначення цього завдання. У виведених даних, що стосується завдань (наприклад, виведенні команди jobs), поточне завдання завжди позначається +, а попереднє завдання — -.

Щоб вивести завдання на передній план, можна просто використати його назву: % є синонімом “fg %1”, переводить завдання 1 з фонового режиму у режим переднього плану. Так само, “%1 &” відновлює виконання завдання 1 у фоновому режимі, те саме, що і “bg %1”.

Оболонка дізнається відразу, коли завдання змінює стан. Зазвичай, bash очікує, перш ніж сповістити користувача про зміни у стані завдання, щоб не переривати інше виведення, хоча він сповіщатиме про зміни в стані завдання після завершення команди переднього плану у списку, перед виконанням наступної команди у списку. Якщо увімкнено параметр -b для вбудованої команди set, bash повідомлятиме про зміни у стані негайно. Bash виконує будь-яку пастку на SIGCHLD для кожного дочірнього об'єкта, робота якого переривається.

Коли завдання завершується, і bash сповіщає користувача про це, bash вилучає завдання з таблиці. Його не буде показано у виведеному командою jobs списку завдань, але wait повідомлятиме про стан його завершення, якщо як аргумент буде надано ідентифікатор процесу, пов'язаний із завданням. Якщо таблиця порожня, номери завдань починаються з 1.

Якщо користувач робить спробу вийти з bash за наявності зупинених завдань (або запущених, якщо параметр оболонки checkjobs увімкнено за допомогою вбудованої команди shopt), оболонка друкує попередження, і, якщо параметр checkjobs увімкнено, виводить список завдань та їхні стани. Потім для перевірки їх стану можна скористатись командою jobs. Якщо користувач негайно намагається знову вийти, без проміжних команд, bash не друкує іншого попередження, і завершує будь-які зупинені завдання.

Коли оболонка очікує на завдання або процес із використанням вбудованої команди wait, і увімкнено керування завданнями, wait повернеться, коли завдання змінить стан. Параметр -f змушує wait, перш ніж повернутися, зачекати на завершення завдання або процесу.

ЗАПИТИ

За інтерактивного виконання, bash показує первинне запрошення PS1, коли інтерпретатор готовий читати команду, і вторинне запрошення PS2, коли для завершення команди потрібне додаткове введення.

Bash перевіряє значення масиву PROMPT_COMMAND безпосередньо перед виведенням кожного основного запиту. Якщо встановлено значення будь-якого елемента з PROMPT_COMMAND і значення не є порожнім, Bash виконує кожне значення в числовому порядку, так, ніби його було введено в командному рядку. Bash показує PS0 після зчитування команди, але перед її виконанням.

Bash показує PS4, як описано вище, перед трасуванням кожної команди, якщо увімкнено параметр -x.

Bash надає змогу налаштовувати рядки запитів PS0, PS1, PS2 та PS4 шляхом вставляння певної кількості спеціальних символів, екранованих зворотною похилою рискою, які декодуються наступним чином:

Символ дзвінка ASCII (07).
Дата у “Weekday Month Date” форматі (приклад: “Tue May 26”).
Формат передається в strftime(3), а результат вставляється в рядок запиту; порожній формат призводить до відображення часу для певної локалі. Фігурні дужки потрібні
Символ escape в ASCII (033)
Назва вузла до першої “.”.
Назва вузла.
Кількість завдань, що оболонка зараз ними керує.
Основа назви файла пристрою термінала оболонки (приклад: “ttys0”).
Символ розриву рядка.
Повернення каретки.
Назва оболонки, основа назви $0 (частина після останньої косої риски).
Поточний час у 24-годинному форматі ГГ:ХХ:СС.
Поточний час у 12-годинному форматі ГГ:ХХ:СС.
\@
Поточний час у 12-годинному форматі ДП/ПП.
Поточний час у 24-годинному форматі ГГ:ХХ.
Назва облікового запису поточного користувача.
Версія bash (приклад: 2.00).
Випуск bash, версія + рівень модифікації (приклад: 2.00.0)
Значення змінної оболонки PWD ($PWD) $HOME скороченим тильдою (використовується значення змінної PROMPT_DIRTRIM).
Базова назва $PWD з $HOME, скороченим тильдою.
\!
Номер у журналі цієї команди.
\#
Номер цієї команди.
\$
Якщо ефективним ідентифікатором користувача (UID) є 0, #, інакше $.
Символ, що відповідає вісімковому числу nnn.
\\
Зворотна похила.
\[
Початок послідовності не призначених для друку символів, якими можна скористатися для вбудовування керівної послідовності термінала до запиту.
\]
Кінець послідовності не призначених для друку символів.

Номер команди та номер журналу зазвичай відрізняються: номер журналу команди – це її положення в списку журналу, який може включати команди, відновлені з файлу журналу (див. нижче ЖУРНАЛ), а номер команди — це позиція в послідовності команд, що виконуються під час поточного сеансу оболонки. Після декодування рядка він розширюється за допомогою розширення параметрів, заміни команд, арифметичного розширення та видалення лапок, залежно від значення параметра оболонки promptvars (див. нижче опис команди shopt під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ ). Це може мати небажані побічні ефекти, якщо екрановані частини рядка з’являються під час заміни команди або містять символи, призначені для розширення слова.

READLINE

Це бібліотека, яка обробляє читання вводу під час використання інтерактивної оболонки, якщо під час виклику оболонки не вказано параметр --noediting. Редагування рядків також застосовується за використання параметру -e для вбудованої програми read. Типово команди редагування рядків подібні до команд emacs. Також доступний інтерфейс редагування рядків у стилі vi. Редагування рядків можна ввімкнути в будь-який час за допомогою параметрів -o emacs або -o vi у вбудованій команді set (див. нижче ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ). Щоб вимкнути редагування рядка після запуску оболонки, скористайтеся параметрами +o emacs або +o vi вбудованої команди set.

Запис Readline

У цьому розділі для запису сполучень клавіш застосовується нотація в стилі Emacs. Клавіші з Control позначаються C-клавіша, наприклад, C-n означає Control-N. Так само, клавіші з Meta позначаються M-клавіша, тобто, M-x означає Meta-X. “Alt” або “Option”.

На клавіатурах без клавіші Meta, M-x означає ESC x, тобто, натискання і відпускання клавіші ESC, а потім натискання і відпускання x, послідовно. Це робить ESC Meta-префіксом. Комбінація M-C-x означає ESC-Control-x, або натискання і відпускання клавіші ESC, а потім натискання і утримання клавіші Control під час натискання клавіші x з наступним відпусканням обох.

На деяких клавіатурах модифікатор-клавіша Meta створює символи з встановленим восьмим бітом (0200). Ви можете використовувати змінну enable-meta-key, щоб контролювати, чи робити це, якщо це можливе для клавіатури. На багатьох інших термінал або емулятор термінала перетворює метаформовану клавішу на послідовність клавіш, що починається з ESC, як описано в попередньому абзаці.

Якщо ваша клавіша Meta створює послідовність клавіш із метапрефіксом ESC, ви можете зробити те саме для вказаних вами прив’язок клавіш M-key (див. Прив'язка клавіш Readline нижче), встановивши змінну force-meta-prefix.

Команди кeadline можуть отримувати числові аргументи, які зазвичай діють як число повторень. Іноді, однак, важливим є знак аргументу. Передача від'ємного аргументу команді, яка діє в прямому напрямку (наприклад., kill-line) змушує цю команду діяти у зворотному напрямку. Нижче наведено команди, які опрацьовують аргументи інакше.

Аргументом точка є поточна позиція курсора, а позначка посилається на збережену позицію курсора. Текст між точкою вставлення та позначкою будемо називати областю. У readline передбачено поняття активної області: коли область є активною, redisplay readline підсвічує область, використовуючи значення змінної active-region-start-color. Змінна enable-active-region вмикає і вимикає цю функцію. Кілька команд встановлюють активний стан області; їх наведено нижче.

Коли команда описується як вбитий текст, видалений текст зберігається для можливого майбутнього пошуку (висмикування). Вбитий текст зберігається в кільці вбитого. Послідовні вбиття призводять до того, що текст накопичується в один блок, який можна висмикнути відразу. Команди, які не вбивають тексту, відокремлюють шматки тексту на кільці вбитого.

Ініціалізація Readline

Readline is customized by putting commands in an initialization file (the inputrc file). The name of this file is taken from the value of the INPUTRC shell variable. If that variable is unset, the default is ~/.inputrc. If that file does not exist or cannot be read, readline looks for /etc/inputrc. When a program that uses the readline library starts up, readline reads the initialization file and sets the key bindings and variables found there, before reading any user input.

У файлі inputrc дозволено лише кілька базових конструкцій. Порожні рядки буде проігноровано. Рядки, які починаються з #, є коментарями. Рядки, які починаються з $, позначають конструкції умов. Інші рядки позначають прив'язки клавіш і параметри змінних.

Типові прив’язки клавіш у цьому розділі можна змінити за допомогою команд прив'язування клавіш у файлі inputrc. Програми, які використовують readline, зокрема bash, можуть додавати власні команди та прив’язки.

Наприклад, вписування

M-Control-u: universal-argument

або
C-Meta-u: universal-argument

до файла inputrc призведе до того, що у відповідь на M-C-u буде виконано команду readline universal-argument.

Передбачено розпізнавання таких назв символів: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT (руйнівне зворотне вилучення), SPACE, SPC і TAB.

Окрім назв команд, readline уможливлює пов'язування комбінацій клавіш із рядком, який буде вставлено, коли буде натиснуто комбінацію (макрос). Різниця між макросом і командою полягає в тому, що макрос беруть в одинарні або подвійні лапки.

Клавіатурні скорочення у readline

Синтаксис записів, які керують прив'язкою клавіш у файлі inputrc, є доволі простим. Достатньо вказати назву команди або текст макроса та послідовність клавіш, з якою слід пов'язати цю команду чи макрос. Комбінацію клавіш можна вказати в один з двох способів: у формі символічної назви клавіш, із можливими префіксами Meta- або Control-, або у формі послідовності клавіш. Послідовність клавіш і назву слід відокремлювати двокрапкою. Між назвою та двокрапкою не повинно бути пробілів.

При використанні форми назва_комбінації:назва_функції або макрос, назва_комбінації є комбінацією назв клавіш у латинській розкладці. Приклад:


Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output"

У наведеному вище прикладі C-u пов'язано із функцією universal-argument, M-DEL пов'язано із функцією backward-kill-word, а C-o пов'язано із запуском макроса, який записано у правій частині виразу (тобто вставити текст “> output” до рядка).

У другій формі, "послідовність_клавіш":назва_функції або макрос, послідовність_клавіш відрізняється від назви_комбінації вище тим, що рядки, які описують усю послідовність клавіш можна вказати, записавши послідовність у подвійних лапках. Можна використовувати деякі із екранованих послідовностей у стилі GNU Emacs, як у наведеному нижче прикладі, але розпізнавання символічних назв клавіш не передбачено.


"\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1"

У цьому прикладі C-u знову пов'язано із функцією universal-argument. C-x C-r пов'язано із функцією re-read-init-file, а ESC [ 1 1 ~ пов'язано із вставленням тексту “Function Key 1”.

Ось повний список екранованих послідовностей, якими можна скористатися при визначенні послідовностей клавіш у стилі GNU Emacs:

Префікс Ctrl.
Додавання мета-префікса або перетворення наступного символу на мета-символ, як описано нижче в розділі force-meta-prefix.
Символ скасування.
\\
Зворотна похила.
\"
Буквально ", подвійна лапка.
\'
Буквально ', одинарна лапка.

Окрім екранованих послідовностей у стилі GNU Emacs, доступний другий набір екранувань зворотною похилою рискою:

гудок (дзвінок)
backspace
Delete
подавання бланку
новий рядок
повернення каретки
горизонтальна табуляція
вертикальна табуляція
Восьмибітовий символ, значенням якого є вісімкове значення nnn (від однієї до трьох цифр).
Восьмибітовий символ, значенням якого є шістнадцяткове значення HH (від однієї до двох шістнадцяткових цифр).

При введення тексту макросу для позначення визначення макросу слід використовувати одинарні або подвійні лапки. Текст поза лапками вважатиметься назвою функції. У вмісті макросу буде розгорнуто усі описані вище екрановані символом зворотної похилої риски послідовності. Символ зворотної похилої риски екранує будь-який інший символ у тексті макросу, зокрема " та '.

Переглянути або змінити поточні комбінації клавіш readline у bash можна за допомогою вбудованої команди bind. Змінити режим редагування під час інтерактивного використання можна за допомогою параметрів -o emacs іо -o vi вбудованої команди set (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Змінні Readline

У readline передбачено змінні, якими можна скористатися для налаштовування поведінки редактора. Значення змінної може бути встановлено у файлі inputrc за допомогою інструкції у такій формі:

set назва_змінної значення

або за допомогою вбудованої команди bind (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Якщо не зазначено, змінні рядка readlinereadline можуть набувати значень On або Off (без урахування регістру). Нерозпізнані назви змінних нехтуються. Коли readline читає значення змінної, порожні або нульові значення “on” (без врахування регістру символів), а “1” еквівалентне до On. Усі інші значення еквівалентні до Off.

Команда bind виводить список назв із значень поточних змінних readline (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).

Змінні та їхні типові значення:

Рядкова змінна, яка керує кольором та тлом тексту при показі тексту в активній області (див. опис enable-active-region нижче). Ця змінна не повинна приймати будь-яких фізичних позицій символів на екрані, отже вона має складатися лише з керівних послідовностей символів термінала. Її буде виведено до термінала до показу тексту в активній області. Для цієї змінної буде відновлено типове значення під час кожної зміни типу термінала. Типовим значенням є рядок, який переводить термінал у надзвичайний режим, отриманий з опису термінала terminfo. Зразковим значенням може бути “\e[01;33m”.
Рядкова змінна, яка “undoes” наслідки застосування active-region-start-color і відновлює “normal” вигляд термінала після показу тексту в активній області. Цей рядок не повинен приймати жодних фізичних позицій символів на екрані, отже, він має складатися лише з екранованих послідовностей термінала. Його буде виведено до термінала після показу тексту в активній області. Для цієї змінної буде відновлено типове значення при зміні типу термінала. Типовим значенням є рядок, який відновлює термінал з надзвичайного режиму, отриманий з опису термінала terminfo. Зразок значення: “\e[0m”.
Керує тим, що відбудеться, коли readline звертається до звукового сигналу термінала. Якщо встановлено none, readline не подає звукового сигналу. Якщо встановлено visible, readline використовує видимий дзвінок, якщо такий є. Якщо встановлено audible, намагається подати звуковий сигнал термінала.
Якщо встановлено On, readline намагається пов'язати керувальні символи, які спеціально обробляються термінальним драйвером ядра, з їх еквівалентами readline. Вони перевизначають стандартні прив'язки readline, описані тут. Введіть “stty -a” до запиту bash, щоб переглянути параметри вашого поточного термінала, зокрема спеціальні керівні символи (зазвичай cchars).
Якщо встановлено On, readline намагається короткочасно перемістити курсор до відкритої дужки, коли вставлено закриту дужку.
Якщо встановлено On, readline у переліку завершень виводить спільний префікс набору можливих завершень іншим кольором. Визначення кольору беруться зі значення змінної середовища LS_COLORS. Якщо у $LS_COLORS є визначення кольору для нетипового суфікса “.readline-colored-completion-prefix”, readline використовує цей колір для загального префікса, замість його типового кольору.
Якщо встановлено On, readline показує можливі завершення, використовуючи різні кольори, щоб вказують на тип файлу. Визначення кольору беруться зі значення змінної середовища LS_COLORS.
#) Рядок, який буде вставлено, якщо буде виконано команду readline insert-comment. Цю команду пов'язано із M-# у режимі emacs і # у режимі команд vi.
Кількість позицій стовпчиків на екрані, які буде використано для показу можливих варіантів при виконанні автоматично доповнення. Значення буде проігноровано, якщо воно менше 0 або більше за ширину екрана у терміналі. Значення 0 призведе до показу відповідників по одному на рядок. Типовим є значення -1.
Якщо встановлено значення On, readline виконує пошук відповідників за назвою файла і доповнює текст без врахування регістру символів.
Якщо встановлено значення On і увімкнено completion-ignore-case, readline оброблятиме дефіси (-) та підкреслювання (_) як еквіваленти при виконання пошуку та автоматичного доповнення назв файлів без врахування регістру символів.
Максимальна довжина у символах загального префікса у списку можливих варіантів доповнення, для якої префікс буде показано без видозміни. Якщо встановлено додатне значення, при показі варіантів автоматичного доповнення загальний префікс, довший за встановлене значення, буде замінено обрізаним варіантом, який завершуватиметься трьома крапками. Якщо автодоповнення починається з крапки, а eadline автодоповнює назви файлів, замість трьох крапок буде використано три символи підкреслення.
Визначає, коли користувач отримує запит щодо показу певної кількості можливих доповнень, згенерованих командою possible-completions. Можна встановити будь-яке ціле значення, більше або рівне нулю. Якщо кількість можливих доповнень більша або дорівнює значенню цієї змінної, readline запитає, чи бажає користувач їх переглядати; в іншому разі вони просто виведуться в терміналі. Нульове значення означає, що readline ніколи не повинна надсилати запит; від'ємні значення вважатимуться нульовими.
Якщо встановлено значення On, readline перетворює зчитані символи, восьмий біт яких встановлено на послідовність клавіш ASCII, очищуючи восьмий біт і додаючи перед ним символ екранування (перетворюючи символ так, щоб він мав префікс meta). Типове значення — On, але readline встановлює значення Off, якщо локаль містить символи, кодування яких можуть містити байти з встановленим восьмим бітом. Ця змінна залежить від категорії локалі LC_CTYPE і може змінюватися, якщо змінюється локаль. Ця змінна також впливає на прив'язки клавіш; див. опис force-meta-prefix нижче.
Якщо встановлено значення On, readline успадковуватиме автоматичне доповнення слів. Символи автоматичного доповнення буде встановлено до рядка так, їх було пов'язано із self-insert.
Якщо встановлено значення On, у операційних системах, які сигналізують про відповідну підтримку, readline повторить символ, який відповідає сигналу, створеному з клавіатури.
Визначає, буде readline починати роботу із набором прив'язок до комбінацій клавіш, подібним до Emacs чи vi. Для параметра режим_редагування можна встановити значення emacs або vi.
Якщо змінну show-mode-in-prompt увімкнено, цей рядок виводиться безпосередньо перед останнім рядком основного запиту, коли активний режим редагування emacs. Значення розгортається як прив’язка клавіші, тому доступний стандартний набір мета- та керувальних префіксів і керувальних послідовностей зі зворотною косою рискою. Використовуйте екрановані послідовності \1 та \2, щоб почати та закінчити послідовності недрукованих символів, які можна використовувати для вбудовування послідовності керування терміналом у рядок режиму.
Якщо для цієї змінної встановлено значення On, readline дозволить певним командам позначати область як активну. Якщо область є активною, readline підсвічуватиме текст в області з використанням значення змінної active-region-start-color, типовим значенням якої є рядок, який вмикає надзвичайний режим термінала. В активній області буде показано текст, який вставлено вставленням у дужках, та будь-який відповідний текст, який знайдено нарощувальним або ненарощувальним пошуком у журналі.
Коли встановлено On, readline налаштує термінал так, що дозволить йому вміщувати кожну вставку в буфер редагування як один рядок символів, замість того, щоб обробляти кожен символ так, ніби він був прочитаний з клавіатури. Це називають режимом вставлення у дужках; він запобігає виконанню у readline будь-яких команд з редагування, прив'язаних до послідовностей клавіш, що можуть з'являтися у вставленому тексті.
Якщо встановлено значення On, readline намагатиметься ввімкнути програмну клавіатуру під час її виклику. Деякі системи потребують цього, щоб увімкнути клавіші зі стрілками.
Якщо встановлено значення On, readline намагається увімкнути будь-яку клавішу-модифікатор meta, яку термінал обіцяє підтримувати. У багатьох терміналах клавіша Meta використовується для надсилання восьмибітних символів; ця змінна перевіряє можливості термінала, які показують, що термінал може вмикати та вимикати режим, який встановлює восьмий біт символу (0200), якщо клавіша Meta утримується натиснутою під час введення символу (метасимвол).
Якщо встановлено On, коли readline намагається закінчити слово, виконується розгортання тильди.
Якщо встановлено значення On, readline змінює свою поведінку під час пов'язування послідовностей клавіш, що містять \M- або Meta- (див. Прив'язки клавіш вище), перетворюючи послідовність клавіш вигляду \M-C або Meta-C на двосимвольну послідовність ESC C (додаючи префікс meta). Якщо для force-meta-prefix встановлено значення Off (типовий варіант), readline використовує значення змінної convert-meta, щоб визначити, чи слід виконувати це перетворення: якщо convert-meta має значення On, readline виконує описане вище перетворення; якщо воно має значення Off, readline перетворює C на метасимвол, встановлюючи восьмий біт (0200).
Якщо встановлено On, код журналу намагається розмістити курсор у тому самому місці в кожному рядку журналу, отриманому за допомогою previous-history або next-history.
Задає максимальну кількість записів журналу, збережених у списку журналу. Якщо встановлено значення 0, усі наявні записи журналу видаляються, а нові записи не зберігаються. Якщо встановлено значення менше нуля, кількість записів журналу не обмежена. Типово bash встановлює кількість записів журналу за значенням змінної оболонки HISTSIZE. За спроби встановити для history-size нечислове значення, для максимальної кількості записів журналу буде встановлено значення 500.
Встановлення для цієї змінної значення On, змушує readline використовувати для показу один рядок, прокручуючи введення горизонтально на одному екранному рядку, коли він стає довшим за ширину екрана, а не переносити на новий рядок. Цей параметр автоматично вмикається для терміналів висотою 1.
Якщо встановлено значення On, readline вмикає восьмибітний ввід (тобто не очищує восьмий біт у символах, які зчитує), незалежно від того, підтримку чого передбачено у терміналі. Типове значення — Off, але readline встановлює його на On, якщо локаль містить символи, кодування яких може містити байти зі встановленим восьмим бітом. Ця змінна залежить від категорії локалі LC_CTYPE, і її значення може змінюватися, якщо змінюється локаль. Назва meta-flag є синонімом input-meta.
C-[C-j) Рядок символів, який повинен завершити інкрементний пошук без подальшого виконання символу як команди. Якщо цій змінній не надано значення, інкрементний пошук завершать символи ESC і C-J.
Задає поточну розкладку клавіш readline. Допускаються назви розкладок: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command і vi-insert. vi еквівалентне vi-command; emacs еквівалентне emacs-standard. Типовим є значення emacs; значення editing-mode також впливає на типову розкладку.
Визначає тривалість очікування readline на символ, під час читання неоднозначної послідовності клавіш (такої, яка може сформувати повну послідовність клавіш на основі вже введеного, або може продовжити введення для завершення довшої послідовності клавіш). Якщо readline не отримує вхідних даних протягом затримки, readline використає коротшу, але повну послідовність клавіш. Значення вказано в мілісекундах, тому значення 1000 означає, що readline чекатиме на додаткове введення одну секунду. Якщо для цієї змінної встановлено значення, менше або рівне нулю, або нечислове значення, readline чекатиме натиснення наступної клавіші, щоб вирішити, яку послідовність клавіш завершити.
Якщо встановлено в On, завершені каталоги матимуть похилу в кінці назв.
Якщо встановлено в On, рядки журналу, що були змінені, будуть показані readline з зіркою попереду (*).
Якщо встановлено значення On, до повних назв, які є символьними посиланнями на каталоги, додається коса риска, залежно від значення mark-directories.
Якщо для цієї змінної встановлено значення On, readline примусово встановлюватиме відповідність файлам, назви яких починаються з “.” (приховані файли) при виконанні доповнення назв файлів. Якщо встановлено значення Off, користувачеві доведеться включати початкову “.” до назви файла, доповнення якої відбувається.
Якщо встановлено значення On, доповнення за меню показує спільний префікс списку можливих доповнень (який може бути порожнім) перед циклічним переходом за списком.
Якщо встановлено значення On, readline показуватиме символи зі встановленим восьмим бітом безпосередньо, а не у вигляді escape-послідовності з метапрефіксом. Типовим є Off, але readline встановить його в On, якщо локаль містить символи, чиї кодування можуть включати байти із встановленим восьмим байтом. Значення цієї змінної залежить від категорії локалі LC_CTYPE і може змінюватися при зміні локалі.
Якщо встановлено значення On, readline використовуватиме внутрішній пейджер схожий на more(1) для показу повноекранного списку можливих доповнень за раз.
Див. bell-style.
Якщо встановлено значення On, readline виводитиме доповнення зі збігами в алфавітному порядку горизонтально, а не донизу екрану.
Якщо встановлено значення On, accept-line перед поверненням скасує всі зміни в рядках журналу, коли виконується accept-line. Типово рядки журналу можуть бути змінені й зберігають окремі списки скасування для викликів readline.
Якщо встановлено значення On, readline виконує нарощувальні і ненарощувальні пошуки у списку журналу без врахування регістру символів.
Це змінює типову поведінку функцій доповнення. Якщо встановлено значення On, для слів, які мають більше одного можливого доповнення, замість дзвінка будуть негайно виводитися збіги.
Це змінює типову поведінку функцій доповнення так само, як show-all-if-ambiguous. Якщо встановлено значення On, для слів, які мають більше одного можливого доповнення без будь-якого можливого часткового доповнення (можливі доповнення не мають спільного префікса), замість дзвінка будуть негайно виводитися збіги.
Якщо встановлено в On, додайте рядок на початку, щоб показувати підказку режиму редагування: emacs, команда vi, або вставлення vi. Рядки режиму може встановлювати користувач (напр., emacs-mode-string).
Якщо встановлено в On, це змінює типову поведінку доповнення коли один відповідник вставляється в рядок. Цей параметр працює лише коли виконується доповнення всередині слова. Якщо увімкнено, readline не вставляє символи, що збігаються з символами після точки у слові, що доповнюється, тож частини слів після курсора не дублюються.
Якщо змінну show-mode-in-prompt увімкнено, цей рядок виводиться безпосередньо перед останнім рядком основного запиту, коли активний режим редагування vi у режимі команди. Значення розгортається як прив’язка клавіші, тому доступний стандартний набір мета- та керувальних префіксів і керувальних послідовностей зі зворотною косою рискою. Використовуйте екрановані послідовності \1 та \2, щоб почати та закінчити послідовності недрукованих символів, які можна використовувати для вбудовування послідовності керування терміналом у рядок режиму.
Якщо змінну show-mode-in-prompt увімкнено, цей рядок виводиться безпосередньо перед останнім рядком основного запиту, коли активний режим редагування vi у режимі вставлення. Значення розгортається як прив’язка клавіші, тому доступний стандартний набір мета- та керувальних префіксів і керувальних послідовностей зі зворотною косою рискою. Використовуйте екрановані послідовності \1 та \2, щоб почати та закінчити послідовності недрукованих символів, які можна використовувати для вбудовування послідовності керування терміналом у рядок режиму.
Якщо встановлено значення On, при виведенні списку можливих доповнень до назви файла буде дописано символ, який позначає тип файла, який виводить команда stat(2).

Умовні конструкції readline

Readline реалізує засіб, подібний за духом до умовної компіляції препроцесора C, що дозволяє виконувати прив’язки клавіш і налаштування змінних у результаті тестів. Доступними є чотири директиви обробника.

$if
Конструкція $if дозволяє виконувати прив’язки на основі режиму редагування, термінала, який використовується, або програми, що використовує readline. Текст тесту після будь-якого оператора порівняння поширюється до кінця рядка; якщо не зазначено інше, для його ізолювання не потрібні символи.
Форма mode= директиви $if використовується для перевірки того, перебуває readline у режимі emacs чи vi. Це можна використати разом з командою set keymap, наприклад, щоб установити прив'язки лише для розкладок emacs-standard і emacs-ctlx, якщо readline запущено в режимі emacs.
Формою term= можна скористатися для включення специфічних для термінала прив'язок клавіш, можливо, щоб пов'язати послідовності натискання клавіш із функціональними клавішами термінала. Слово у правій частині виразу після = підлягатиме перевірці на відповідність повній назві термінала та частині назви термінала до першого символу -. Це, наприклад, надаватиме змогу встановити відповідність xterm як до xterm, так і до xterm-256color.
Перевіркою version можна скористатися для виконання порівнянь версій readline. Змінну version буде розгорнуто до поточної версії readline. Множина операторів порівняння складається з ===), !=, <=, >=, < та >. Номер версії, який буде використано праворуч від оператора, складається з номера основної версії, необов'язкової десяткової крапки та необов'язкового номера проміжної версії (наприклад, 7.1). Якщо проміжну версію не вказано, її типовим значенням є 0. Оператор може бути відокремлено від рядка version і від номера версії пробілами.
Конструкцією application можна скористатися для включення специфічних для програми параметрів. Кожна з програм, у яких використано бібліотеку readline, встановлює назву програми, а файл ініціалізації може перевіряти певне значення. Цим можна скористатися для прив'язки послідовностей клавіш до функцій, які можуть бути корисними для певної програми. Наприклад, вказана нижче команда додає послідовність клавіш, яка бере у лапки поточне або попереднє слово у bash:


$if Bash # Нейтралізація поточного або попереднього слова "\C-xq": "\eb\"\ef\"" $endif
Конструкція variable надає у ваше розпорядження прості перевірки на рівність змінних та значень readline. Дозволеними операторами порівняння є =, == і !=. Назву змінної має бути відокремлено від оператора порівняння пробілом; оператор може бути відокремлено від значення у правій частині пробілом. Перевірки можна виконувати як для булевих, так і для рядкових змінних. Булеві зміні слід порівнювати зі значеннями on і off.
$else
Команди у цій гілці директиви $if буде виконано, якщо не буде пройдено перевірку умови.
$endif
Ця команда, як у попередньому прикладі, перериває виконання команди $if.
$include
This directive takes a single filename as an argument and reads commands and key bindings from that file. For example, the following directive would read /etc/inputrc:

$include  /etc/inputrc

Пошук

У readline передбачено команди для пошуку у журналі команд (див. ЖУРНАЛ нижче) рядків, які містять вказаний рядок. Передбачено два режими пошуку: нарощувальний і ненарощувальний.

Нарощувальний пошук розпочинається перед тим, як користувач завершив введення рядка для пошуку. При введення кожного з символів рядка пошуку, readline показуватиме наступний запис із журналу, який відповідає введеному на поточний момент рядку. Для нарощувального пошуку достатньо мінімальної кількості символів для знаходження бажаного запису журналу. У режимі редагування emacs натисніть C-r, щоб шукати певний рядок назад у журналі. Натискання C-s виконує пошук вперед у журналі. Для переривання нарощувального пошуку використовують значення змінної isearch-terminators. Якщо із цією змінною не пов'язано значення, нарощувальний пошук можна буде перервати натисканням клавіші ESC або комбінації клавіш C-j. Натискання комбінації клавіш C-g призведе до переривання нарощувального пошуку і відновлення початкового рядка. При перериванні пошуку запис журналу, який містить рядок пошуку стане поточним рядком команди.

Щоб знайти інші відповідні записи в списку журналу, наберіть C-r або C-s, відповідно. Це почне пошук назад або вперед в журналу на наступний запис, щоб відповідає вже набраному рядку. Будь-які інші комбінації клавіш прив'язані до команд readline припинять пошук та виконають команду. Наприклад, розрив рядка припинить пошук та прийме рядок, таким чином виконуючи команду зі списку журналу. Команда переміщення завершить пошук, зробить останній знайдений рядок поточним і запустить редагування.

Readline запам'ятовує останній рядок нарощувального пошуку. Якщо буде двічі поспіль введено C-r при визначенні рядка нового пошуку, буде використано рядок пошуку з пам'яті.

Ненарощувальні пошуки зчитують весь рядок пошуку перед тим, як починати шукати у записах журналу. Рядок пошуку може бути набраний користувачем або бути частиною поточного рядка.

Назви команд readline

Далі наведено список назв команд та типові послідовності клавіш, до яких вони прив'язані. Назви команд без відповідної послідовності клавіш є типово неприв'язаними.

У наступних описах, point посилається на поточну позицію курсора, а mark вказує на позицію курсора, збережену командою set-mark. Текст між точкою і позначкою позначається, як region. У readline передбачено активної області. Якщо область є активною, readline підсвічуватиме текст в області з використанням значення active-region-start-color. Змінна readline enable-active-region вмикає або вимикає цю поведінку. Декілька команд роблять область активною; їх згадано нижче.

Команди для пересування

Перейти до початку поточного рядка. На деяких клавіатурах може бути пов’язано з клавішею Home.
Перейти до кінця рядка. На деяких клавіатурах може бути пов’язано з клавішею End.
Перейти на символ вперед. На деяких клавіатурах це також може бути пов’язано з клавішею зі стрілкою праворуч.
Перейти на символ назад. На деяких клавіатурах це також може бути пов’язано з клавішею зі стрілкою ліворуч.
Перейти вперед до кінця наступного слова. Слова складаються з літер та цифр.
Перейти назад до початку поточного або попереднього слова. Слова складаються з літер і цифр.
Перейти вперед до кінця наступного слова. Словами вважаються послідовності символів, які обмежено ненейтралізованими метасимволами оболонки.
Перейти назад до початку поточного або попереднього слова. Словами вважаються послідовності символів, які обмежено ненейтралізованими метасимволами оболонки.
Спробувати перемістити позицію до того самого стовпчика фізичного екрана у попередньому рядку фізичного екрана. Це не дасть бажаного результату, якщо поточний рядок readline не займає більше одного фізичного рядка або якщо позиція не перевищує довжини запиту разом із довжиною екрана у символах.
Спробувати перемістити позицію до того самого стовпчика фізичного екрана у наступному рядку фізичного екрана. Це не дасть бажаного результату, якщо поточний рядок readline не займає більше одного фізичного рядка або якщо довжина поточного рядка readline не перевищує довжини запиту разом із довжиною екрана у символах.
Очистити екран і, якщо можна, буфер гортання термінала, потім перемалювати поточний рядок, лишивши поточний рядок на початку екрана.
Очистити екран, потім перемалювати поточний рядок, лишивши поточний рядок на початку екрана. З числовим аргументом освіжити поточний рядок без очищення екрана.
Освіжити поточний рядок.

Команди для роботи з журналом

Прийняти рядок, незалежно від того, де перебуває курсор. Якщо цей рядок є непорожнім, додати його до списку журналу відповідно до стану змінних HISTCONTROL і HISTIGNORE. Якщо рядок є зміненим рядком журналу, потім відновити початковий стан рядка журналу.
Отримати попередню команду зі списку журналу, пересунувшись назад списком. Це також може бути пов’язано зі стрілкою вгору на деяких клавіатурах.
Отримати наступну команду зі списку журналу, пересунувшись вперед списком. Це також може бути пов’язано зі стрілкою вниз на деяких клавіатурах.
Перейти до першого рядка у журналі.
Перейти до кінця журналу введення, тобто до рядка, який зараз вводять.
Прийняти поточний рядок до виконання, наче було натиснуто клавішу введення, і отримати наступний рядок з журналу відносно поточного для редагування. Числовий аргумент, якщо його вказано, визначає запис журналу, яким слід скористатися замість поточного рядка.
Із числовим аргументом отримати відповідний запис у списку журналу і зробити його поточним рядком. Без аргументу, перейти назад до першого запису у списку журналу.
Шукати у напрямку до початку журналу, починаючи з поточного рядка і пересуваючись “up”
«вгору» журналу, якщо це потрібно. Це нарощувальний пошук. Ця команда встановлює області для встановлення відповідності тексту та активує область.
Шукати у напрямку до кінця журналу, починаючи з поточного рядка і пересуваючись “down”
«вгору» журналу, якщо це потрібно. Це нарощувальний пошук. Ця команда встановлює області для встановлення відповідності тексту та активує область.
Шукати у напрямку до початку журналу, починаючи з поточного рядка, з використанням ненарощувального пошуку рядка, який надано користувачем. Рядок для пошуку може відповідати будь-якій частині рядка журналу.
Шукати у напрямку до кінця журналу з використанням ненарощувального пошуку рядка, який надано користувачем. Рядок для пошуку може відповідати будь-якій частині рядка журналу.
Шукати назад в журналі рядок з символами між початком поточного рядка і точкою. Критерій пошуку має збігатися з рядком тексту на початку рядка журналу. Такий пошук не є нарощувальним. Його може бути пов'язано із клавішею Page Up на деяких клавіатурах.
Шукати вперед у журналі рядок з символами між початком поточного рядка і точкою. Рядок пошуку має збігатися з початком рядка журналу. Цей пошук не є нарощувальним. Його може бути пов'язано із клавішею Page Down на деяких клавіатурах.
Шукати назад у журналі рядок з символами між початком поточного рядка і точкою. Рядок пошуку може мати збіг будь-де у рядку журналу. Це - ненарощувальний пошук.
Шукати вперед через історію рядок з символами між початком поточного рядка і точкою. Рядок пошуку може мати збіг будь-де в низці журналу. Це - ненарощувальний пошук.
Вставити перший аргумент попередньої команди (переважно друге слово на попередньому рядку) в точці. З аргументом n, вставити n-те слово з попередньої команди (слова в попередній команді починаються з слова 0). Негативний аргумент вставляє n-те слово від кінця попередньої команди. Коли аргумент n обчислено, буде використано можливості розгортання журналу для видобування n-го слова, наче встановлено “!n” розгортання за журналом.
Вставити останній аргумент попередньої команди (останнє слово попереднього запису журналу). З числовим аргументом, поводиться так само як yank-nth-arg. Успішні виклики в yank-last-arg пересуваються назад в списку журналу, вставляючи останнє слово (або слово, вказане аргументом першого виклику) кожного рядка по черзі. Будь-який числовий аргумент наданий цим послідовним викликам визначає напрямок пересування через історію. Негативний аргумент перемикає напрямок через історію (назад чи вперед), Засоби розкриття журналу використовуються для витягання останнього слова, як ніби вказано розкриття журналу “!$” розгортання за журналом.
Розгорнути рядок, виконавши розгортання слів оболонки. Це виконує розгортання псевдонімів та журналу, лапки $'рядок' та $"рядок", розгортання тильди, розгортання параметрів та змінних, арифметичне розгортання, заміну команд та процесів, розділення слів та вилучення лапок. Явний аргумент придушує підставляння команд та процесів. Див. HISTORY EXPANSION нижче, щоб дізнатися більше про розгортання за журналом.
Виконати доповнення за журналом для поточного рядка. Опис доповнення за журналом можна знайти у розділі ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче.
Виконати доповнення за журналом для поточного рядка і вставити пробіл. Опис доповнення за журналом можна знайти у розділі ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче.
Виконати розгортання альтернатив у поточному рядку. Опис розгортання альтернатив можна знайти у розділі АЛЬТЕРНАТИВИ.
Виконати доповнення за журналом та розгортання альтернатив у поточному рядку.
Синонім до yank-last-arg.
Викликати редактор для поточного рядка команди і виконати результат як команди оболонки. Bash спробує викликати як редактор $VISUAL, $EDITOR і emacs, саме у такому порядку.

Команди для змінення тексту

Символ, що вказує на кінець файла, як його встановлено, наприклад, stty(1). Якщо цей символ читається, коли в рядку немає символів, а позиція міститься на початку рядка, readline інтерпретує його як кінець уведення і повертає EOF.
Видалити символ у точці. Якщо ця функція прив’язана до того ж символу, що й символ tty EOF, зазвичай C-d, опис дії див. вище. Також може бути пов'язано із клавішею Delete на деяких клавіатурах.
Видалити символ перед курсором. Якщо надано числовий аргумент, зберегти видалений текст у кільці вбитого.
Видалити символ під курсором, якщо курсор не перебуває в кінці рядка; в останньому випадку буде видалено символ перед курсором.
Додати наступний уведений символ до рядка дослівно. Так можна вставити послідовності клавіш, наприклад, C-q.
Вставити символ табуляції.
Вставити введений символ.
Область дії цієї функції обмежено до екранованих послідовностей “bracketed paste” , які надсилають деякими терміналами, і такі прив'язки визначаються типово. Це надає змогу readline вставляти вставлений текст як єдине ціле, не обробляючи кожен символ так, ніби він був прочитаний з клавіатури. Вставлені символи вставляються так, ніби кожен з них був зв'язаний з self-insert, замість виконання будь-яких команд редагування.
Вставлення у дужках встановлює область для вставлення тексту і активує область.
Поміняти місцями символ перед курсором і символ під курсором, також перемістити курсор вперед. Якщо курсор перебуває в кінці рядка, то буде переставлено останні два символи рядка. Від'ємні аргументи не діють.
Поміняти місцями слово перед курсором і слово після курсора, також перемістити курсор вперед. Якщо курсор перебуває в кінці рядка, то буде переставлено останні два слова в рядку.
Поміняти місцями слово перед курсором і слово після курсора, також перемістити курсор вперед. Якщо точка вставлення перебуває в кінці рядка, то буде переставлено останні два слова в рядку. Межі слів є тими самими, що і для shell-forward-word і shell-backward-word.
Перевести поточне (або наступне) слово у верхній регістр. З від'ємним аргументом, перевести у верхній регістр попереднє слово, не переміщуючи курсора.
Перевести поточне (або наступне) слово у нижній регістр. З від'ємним аргументом, перевести у нижній регістр попереднє слово, не переміщуючи курсора.
Почати з великої літери поточне (або наступне) слово. З від'ємним аргументом, Почати з великої літери попереднє слово, не переміщуючи курсора.
Перемкнути режим заміни. З явним додатним числовим аргументом перемикається в режим заміни. З явним недодатним числовим аргументом перемикається в режим вставки. Ця команда впливає лише на режим emacs; режим vi вмикає заміну інакше. Кожен виклик readline() починається в режимі вставки.
В режимі заміни, пов'язані з self-insert, замінюють текст у позиції курсора, а не зсувають його вправо. Символи, пов'язані з backward-delete-char, замінюють символ перед курсором на пропуск. Типово ця команда не зв’язана, але її можна пов'язати із клавішею Insert на деяких клавіатурах.

Вбивання та висмикування

Вбити текст від точки до кінця поточного рядка. З від'ємним числовим аргументом вбити текст у зворотному напрямку від курсора до початку рядка.
Вбити до початку поточного рядка. З від'ємним числовим аргументом, вбити вперед від курсора до кінця рядка.
Вбити назад від точки до початку рядка. Вбитий текст зберігається в кільці вбитого.
Зачистити усі символи у поточному рядку без зв'язку з позицією.
Вбити від точки до кінця поточного слова, або якщо між словами, до кінця наступного слова. Межі слів такі ж самі, як в forward-word.
Зачистити слово за позицією. Межі слів є тими самими, які використовуються backward-word.
Вбити від точки до кінця поточного слова, або якщо між словами, до кінця наступного слова. Межі слів такі ж самі, як в shell-forward-word.
Зачистити слово за позицією. Межі слів є тими самими, які використовуються shell-backward-word.
Зачистити слово за позицією, використовуючи пробіл як можу слова. Зачищений текст буде збережено у кільці зачищення.
Вбити слово за точкою, використовуючи пробіл та символ похилої, як межі слів. Вбитий текст зберігається у кільці вбитого.
Вилучити усі пробіли і табуляції навколо позиції.
Зачистити текст у поточній області.
Копіювати текст до області, щоб зачистити буфер, щоб його можна було викинути негайно.
Копіювати слово до позиції до буфера зачищення. Межі слова є тими самими, що і для backward-word.
Копіювати слово після позиції до буфера зачищення. Межі слова є тими самими, що і для forward-word.
Висмикнути верхівку кільця вбитого в буфер на точці.
Повернути кільце вбитого, і висмикнути нову верхівку. Працює лише після yank або yank-pop.

Числові аргументи

Додати цю цифру до аргументу, що вже збирається, або почати новий аргумент. M-- починає негативний аргумент.
Це інший спосіб вказати аргумент. Якщо після цієї команди вказано одну або декілька цифр, можливо, разом із початковим знаком «мінус», ці цифри визначать аргумент. Якщо після команди вказано цифри, повторне виконання universal-argument завершує числовий аргумент, інакше буде проігноровано. У особливому випадку, якщо за цією командою одразу вказано символ, який не є ні цифрою, ні знаком «мінус», лічильник аргументу для наступної команди буде помножено на чотири. Початковим значенням лічильника аргументу є одиниця, тому виконання цієї функції уперше збільшує лічильник до чотирьох, наступне виконання — до шістнадцяти, тощо.

Доповнення

Спробувати виконати доповнення тексту перед позицією. Bash спробує виконати доповнення, спочатку перевіривши за будь-якими програмованими доповненнями для слова команди (див. Програмоване доповнення нижче), otherwise, користуючись текстом як змінною (якщо текст починається з $), іменем користувача (якщо текст починається з ~), назвою вузла (якщо текст починається з @) або командою (включно з альтернативами, функціями і вбудованими командами) послідовно. Якщо нічого не буде знайдено, буде виконано резервну спробу доповнення за назвою файла.
Вивести список можливих варіантів доповнення тексту перед крапкою. Під час показу доповнень readline встановлює кількість позицій, які буде використано для показу, на значення completion-display-width, значення змінної оболонки COLUMNS або ширину екрана саме у такому порядку.
Вставити усі доповнення тексту, які могло б бути створено possible-completions, перед позицією, з відокремленням пробілами.
Подібно до complete, але замінює слово для доповнення єдиним відповідником зі списку можливих доповнень. Повторне виконання menu-complete крокує через список можливих доповнень, вставляючи кожен відповідник по черзі. В кінці списку доповнень, menu-complete вмикає гудок (контрольовано параметром bell-style) та відновлюється початковий текст. Аргумент n пересуває n позицій вперед в списку відповідників; можна використати негативний аргумент для пересування назад по списку. Ця команда призначена бути прив'язаною до TAB, але є типово неприв'язаною.
Ідентично до menu-complete, але пересуває назад через список можливих доповнень, як ніби menu-complete було надано негативний аргумент. Ця команда є типово неприв'язаною.
Виконати автодоповнення слова перед точкою, як описано вище, і записати список можливих автодоповнень у вихідний потік readline, використовуючи наступний формат із записом даних в окремі рядки:
  • кількість відповідників N;
  • слово, яке доповнюють;
  • S:E, де S і E є початковим і кінцевим зсувами слова у буфері рядків readline; тоді
  • кожна відповідність, по одній на рядок
Якщо відповідників немає, першим рядком буде “0”, і ця команда не виводить жодних даних після S:E. Якщо є лише один збіг, ця команда виводить один рядок, що його містить. Якщо є більше одного збігу, ця команда друкує спільний префікс збігів, який може бути порожнім, у першому рядку після S:E, а потім збіги у наступних рядках. У цьому випадку N включатиме перший рядок зі спільним префіксом.
Користувач або програма повинні мати можливість враховувати можливість появи порожнього рядка. Мета полягає в тому, щоб користувач або програма зчитували N рядків після рядка, що містить S:E, щоб отримати список збігів. Цю команду типово не пов'язано зі скороченнями.
Вилучає символ під курсором, якщо він не на початку або в кінці рядка (як delete-char). Якщо в кінці рядка, поводиться ідентично до possible-completions. Ця команда типово неприв'язана.
Спробувати доповнити назву файла за текстом до позиції.
Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст назвою файла.
Спробувати доповнити ім'я користувача за текстом до позиції.
Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст іменем користувача.
Спробувати доповнити змінну оболонки за текстом до позиції.
Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст змінної оболонки.
Спробувати доповнити назву вузла за текстом до позиції.
Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст назвою вузла.
Спробувати доповнення на тексті перед точкою, розглядаючи її, як назву команди. Доповнення команди намагається знайти відповідник тексту між псевдонімами, зарезервованими словами, функціями оболонки, вбудованими елементами оболонки, та, зрештою, назвами виконуваних файлів, в саме такому порядку.
Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст назвою команди.
Спробувати доповнення на тексті перед точкою, порівнюючи текст з рядками з журналу щодо потенційних відповідників доповнення.
Спробувати доповнення меню на тексті перед точкою, порівнюючи текст з рядками зі списку журналу щодо потенційних відповідників доповнення.
Виконати доповнення назви файла і вставити список можливих доповнень у фігурних дужках так, щоб список став доступним оболонці (див. Розгортання у дужках вище).

Макроси клавіатури

Почати збереження введених символів до поточного макросу клавіатури.
Зупинити збереження введених символів до поточного макросу клавіатури і зберегти визначення.
Повторно виконати останній визначений макрос клавіатури, надіславши символи макроса так, наче їх було введено з клавіатури.
Вивести останній макрос клавіатури, визначений у форматі, який можна використати у файлі inputrc.

Різне

Прочитати вміст файла inputrc і включити усі прив'язки або визначення змінних, які там буде знайдено.
Перервати виконання поточної команди редагування і відтворити гудок термінала (який встановлюється параметром bell-style).
Якщо метафікований символ x є символом верхнього регістру, виконати команду, яку пов'язано із відповідним метафікованим символом нижнього регістру. Поведінку не визначено, якщо x вже є символом нижнього регістру.
Метафікувати наступний введений символ. ESC f є тим самим, що і Meta-f.
Нарощувальне скасування дій, яке окремо записується для кожного рядка.
Скасувати усі зміни, які було внесено до цього рядка. Результат буде подібним до виконання команди undo достатню для повернення рядка до початкового стану кількість разів.
Виконати тильда-розгортання для поточного слова.
Встановити позначку у позицію. Якщо вказано числовий аргумент, буде встановлено позначку у відповідній числовій позиції.
Поміняти місцями позиці і позначку. Для поточної позиції курсора буде встановлено збережену позицію, а попередню позицію курсора буде збережено як позначку.
Буде прочитано символ, після чого позицію буде пересунуто до наступного входження цього символу. Використання від'ємного значення аргументу призведе до переходу до попередніх входжень.
Буде прочитано символ, після чого позицію буде пересунуто до попереднього входження цього символу. Використання від'ємного значення аргументу призведе до переходу до наступних входжень.
Прочитати достатньо символів для складання багатоклавішної послідовності, подібної до тієї, яку визначено для клавіш, подібних до Home і End. Такі послідовності починаються з індикатора керівної послідовності (CSI), зазвичай, ESC [. Якщо цю послідовність прив'язано до “\e[”, , клавіші, з яких складаються такі послідовності не працюватимуть, якщо їх не пов'язано явно із командою readline, — не вставлятимуть символи клавіш до буфера редагування. Типово, не прив'язано, але, зазвичай, прив'язують до ESC [.
Без числового аргументу на початку поточного рядка буде вставлено значення змінної readline comment-begin. Якщо вказано числовий аргумент, ця команда працюватиме як перемикач: якщо символи на початку рядка не збігаються зі значенням comment-begin, буде вставлено це значення, в іншому ж випадку, символи comment-begin буде вилучено з початку рядка. В обох випадках рядок буде прийнято так, наче було вставлено символ нового рядка. За типового значення comment-begin ця команда перетворює поточний рядок на коментар оболонки. Якщо у результаті застосування числового аргументу символ коментування буде вилучено, рядок буде виконано командною оболонкою.
Виконати виправлення у поточному слові, вважаючи його назвою каталогу або файла, у той самий спосіб, що і для параметра оболонки cdspell. Межі слів є тими самими, що використовуються у shell-forward-word.
Слово перед позицією буде оброблено як взірець для розгортання шляху з неявним додаванням зірочки наприкінці. Цей взірець буде використано для створення списку відповідних назв файлів для можливого доповнення.
Слово перед позицією буде оброблено як взірець для розгортання шляху. Буде вставлено список відповідних назв файлів із заміною слова. Якщо буде передано числовий аргумент, перед розгортанням шляху до слова буде неявним чином дописано * наприкінці.
Вивести список розгортань, які було б створено за допомогою glob-expand-word і перемалювати рядок. Якщо буде передано числовий аргумент, перед розгортанням шляху до слова буде неявним чином дописано * наприкінці.
Вивести усі функції та їхні прив'язки до комбінацій клавіш до потоку виведення readline. Якщо вказано числовий аргумент, виведені дані буде форматовано так, щоб їх можна було зробити частиною файла inputrc.
Вивести усі придатні до встановлення змінні readline та їхні значення до потоку виведення readline. Якщо вказано числовий аргумент, виведені дані буде форматовано так, щоб їх можна було зробити частиною файла inputrc.
Вивести усі послідовності клавіш readline, які пов'язано із макросами та рядки, які вони виводять до потоку виведення readline. Якщо вказано числовий аргумент, виведення буде форматовано таким чином, щоб його можна було зробити частиною файла inputrc.
Прочитати назву пов'язаної команди readline з вхідних даних і виконати дію, з якою вона пов'язана, так, ніби послідовність клавіш, з якою вона була пов'язана, було виявлено у вхідних даних. Якщо цій функції передано числовий аргумент, вона передає цей аргумент функції, яку вона виконує.
Вивести дані щодо версії для поточного екземпляра bash.

Запрограмоване доповнення

Якщо буде здійснено спробу доповнення слова для команди або аргументу команди, для якої специфікацію доповнення (compspec) було визначено з використанням вбудованої команди complete (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), readline викликає можливості програмованого доповнення.

Спочатку, bash визначає назву команди. Якщо для команди визначено compspec, цей compspec буде використано для створення списку можливих доповнень слова. Якщо слово команди є порожнім рядком (спроба автодоповнення на початку порожнього рядка), bash використовує будь-яку специфікацію compspec, визначену за допомогою параметр -E, для complete. Параметр -I для complete вказує, що слово команди є першим непризначеним словом у рядку або після роздільника команди, такого як ; або |. Зазвичай це вказує на автодоповнення назви команди.

Якщо словом команди є повна назва шляху, bash спочатку шукатиме compspec для повної назви шляху. Якщо для повної назви шляху не буде знайдено compspec, bashбуде виконано спробу знайти compspec для частини, яка слідує за кінцевим символом похилої риски. Якщо ці пошуки не дадуть результату у формі compspec або comspec не існує для слова команди, типово, bash буде використано будь-який compspec, який визначено за допомогою параметра -D команди complete. Якщо типового compspec немає, bash спробує розгортання альтернатив для слова команди, як остаточний резервний варіант, і спробує знайти compspec для слова команди, яке є результатом будь-якого успішного розгортання.

Якщо compspec не знайдено, bash виконує типово автодоповнення, як описано вище у розділі Доповнення. В іншому випадку, після того, як compspec знайдено, bash використовує її для створення списку відповідних слів.

Спочатку, bash буде використано дії, які визначено compspec. Повернуто буде лише відповідники, префіксом яких є слово, яке доповнюють. Якщо для доповнення назв файлів або каталогів використано параметр -f або -d, для фільтрування відповідників bash буде використано значення змінної оболонки FIGNORE.

Далі програмоване доповнення створює відповідники, які задано взірцем розгортання шляхів для параметра -G, наданого як аргумент. Створені за взірцем слова не обов'язково повинні збігатися зі словом, яке доповнюють. Для фільтрування відповідників bash використає змінну FIGNORE, але не використовуватиме змінну оболонки GLOBIGNORE.

Далі, механізмом доповнення буде розглянуто рядок, який задано як аргумент параметра -W. Спочатку, рядок буде поділено на слова з використанням символів в особливій змінній IFS, як роздільників. Буде також взято до уваги нейтралізацію символів в оболонці. Зокрема буде враховано екранування лапками всередині рядка, щоб забезпечити роботу механізму для слів, що містять метасимволи оболонки або символи у значенні IFS. Потім кожне слово буде розгорнуто з використання розгортання у фігурних дужках, розгортання тильди, розгортання параметрів і змінних, заміни команд та арифметичних обчислень, які описано вище у розділі РОЗГОРТАННЯ. Результати буде поділено за правилами, які описано вище у розділі Поділ на слова. Відповідність результатів слову, яке доповнюють, буде встановлено з використанням доповнюваного слова як префікса. Відповідні слова стануть можливими варіантами доповнення.

Після того, як ці збіги згенеровано, bash виконує будь-яку функцію оболонки або команду з параметрами -F та -C. Коли буде викликано команду або функцію, bash встановлює значення змінних COMP_LINE, COMP_POINT, COMP_KEY і COMP_TYPE отримують значення, як описано вище в розділі Змінні оболонки. Якщо викликається функція оболонки, встановлюються також змінні COMP_WORDS і COMP_CWORD. Під час виклику функції або команди, першим аргументом ($1) є назва команди, аргументи якої доповнюються, другий аргумент ($2) — це слово, яке доповнюється, а третій аргумент ($3) — це слово, що передує в поточному командному рядку слову, яке доповнюється. Фільтрування згенерованих доповнень за доповнюваним словом не виконується; функція або команда має повну свободу щодо генерування збігів, і збіг не повинен виконуватися для префікса слова.

Першою буде виконано будь-яку функцію, яку вказано за допомогою -F. Функція може використовувати усі можливості оболонки, зокрема вбудовану команди compgen і compopt, які описано нижче, для створення відповідників. Функція має записувати усі можливі варіанти доповнень до змінної-масиву COMPREPLY, по одному варіанту на елемент масиву.

Далі, буде викликано будь-яку команду, яку вказано за допомогою параметра -C, у середовищі, яке є еквівалентним до заміни команди. Команда має вивести список доповнень, по одному на рядок, до стандартного виведення. Для екранування символу нового рядка, якщо потрібно, можна скористатися символом зворотної похилої риски. Ці доповнення буде додано до набору можливих доповнень.

Після створення bash всіх можливих доповнень, до списку буде застосовано будь-який фільтр, визначений з параметром -X. Фільтр - це шаблон, який використовується для розujhnfння шляху; & в шаблоні замінюється текстом слова, що доповнюється. Літерал & можна екранувати за допомогою зворотної похилої риски; вона видаляється перед випробуванням збігу. Будь-яке доповнення, яке відповідає шаблону, буде вилучено зі списку. Початковий ! заперечує шаблон; у цьому випадку bash буде вилучено будь-яке доповнення, що не відповідає шаблону. Якщо ввімкнено параметр оболонки nocasematch, відповідність перевіряється bash без урахування регістру літер.

Нарешті, програмоване доповнення додає будь-який префікс і суфікс, зазначені параметрами -P і -S, відповідно, до кожного пункту списку доповнення, а результат повертається до readline як список можливих доповнень.

Якщо раніше застосовані дії не створять жодного відповідника, і було передано параметр -o dirnames команди complete при визначенні compspec, буде виконано спробу доповнення назви каталогу.

Якщо при визначенні compspec команді complete було передано параметр -o plusdirs, bash буде виконано спробу доповнення назви каталогу, а усі відповідники буде додано до набору можливих доповнень.

Типово, якщо знайдено compspec, усі створені за ним результати буде повернуто до коду доповнення як повний набір можливих доповнень. Спроби скористатися типовими доповненням bash виконано не буде, а типове доповнення назв файлів для readline буде вимкнено. Якщо вказано параметр -o bashdefault команди complete при визначенні compspec, і comspec не дає відповідників, bash буде виконано спробу скористатися типовими доповненнями. Якщо якщо використано compspec і, якщо було виконано спробу, типові автодоповнення bash не дають збігів, і параметр -o default було передано complete під час визначення специфікації compspec, програмоване автодоповнення виконує типове автодоповнення readline.

Параметри, які передаються complete та compopt, можуть керувати тим, як readline обробляє автодоповнення. Наприклад, параметр -o fullquote повідомляє readline про те, що потрібно брати у лапки збіги так, ніби це назви файлів. Див. опис complete нижче, щоб дізнатися більше.

Якщо compspec вказує, що бажаним є доповнення назви каталогу, програмовані функції доповнення примусять readline дописати символ похилої риски наприкінці доповнених назв, які є символічними посиланням на каталоги з використанням значення змінної readline mark-directories, незалежно від значення змінної readline mark-symlinked-directories.

Є деяка підтримка динамічної модифікації доповнення. Це корисно, якщо застосовується в поєднанні із типовим доповненням, зазначеним у complete -D. Функції оболонки, що виконуються як функції доповнення, можуть вказувати, що доповнення слід повторити, повернувши стан виходу 124. Якщо функція оболонки повертає 124 і змінює compspec, пов’язаний з командою, для якої виконується спроба доповнення (подається як перший аргумент, коли функція виконується), програмоване доповнення перезапускається з початку зі спробою знайти новий compspec для цієї команди. Це дозволяє динамічно будувати набір доповнень у міру спроб доповнення, а не завантажувати всі одночасно.

Наприклад, якщо припустити, що існує бібліотека compspec, кожна з яких зберігається у файлі, що відповідає назві команди, така функція доповнення типово завантажуватиме доповнення динамічно:


_completion_loader() {
. "/etc/bash_completion.d/$1.sh".if 0<80n \
>/dev/null 2>&1 && return 124 } complete -D -F _completion_loader.if 0<80n \
-o bashdefault -o default

ЖУРНАЛ

Якщо увімкнено параметр -o history вбудованої команди set, оболонка надає доступ до журналу команд, - списку команд, уведених раніше. Значення змінної HISTSIZE визначає кількість команд для збереження в списку журналу. Зберігається текст останніх HISTSIZE команд (типово - 500). Оболонка зберігає кожну команду в списку журналу перед розширенням параметрів і змінних (див. вище РОЗШИРЕННЯ), але після розгортання за журналом, залежно від значень змінних оболонки HISTIGNORE та HISTCONTROL.

On startup, bash initializes the history list by reading history entries from the file named by the HISTFILE variable (default ~/.bash_history). That file is referred to as the history file. The history file is truncated, if necessary, to contain no more than the number of history entries specified by the value of the HISTFILESIZE variable. If HISTFILESIZE is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated.

Під час читання файла журналу рядки, які починаються із символу коментаря журналу, за яким одразу йде цифра, вважатимуться позначками часу для наступного рядка журналу. Ці позначки часу, якщо потрібно, буде показано залежно від значення змінної HISTTIMEFORMAT. За наявності, позначки часу журналу розмежовують записи журналу, що надає змогу створювати багаторядкові записи.

Коли оболонка з увімкненим записуванням журналу завершує роботу, bash копіює останні записи $HISTSIZE зі списку журналу до $HISTFILE. Якщо увімкнено параметр оболонки histappend (див. опис shopt у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), bash додає записи до файла журналу, інакше він перезаписує файл журналу. Якщо HISTFILE не встановлено або має порожнє значення, або якщо запис до файла журналу неможливий, журнал не зберігається. Після збереження журналу bash обріза файл журналу до не більше ніж HISTFILESIZE рядків, як описано вище.

Якщо встановлено значення змінної HISTTIMEFORMAT, оболонка записує відомості про позначку часу, пов'язану з кожним записом журналу, до файла журналу, позначаючи їх символом коментаря журналу, тому позначки часу зберігаються протягом усіх сеансів оболонки. Щоб відрізнити позначки часу від інших рядків журналу, використовується символ коментаря журналу. Як і вище, при використанні HISTTIMEFORMAT позначки часу розмежовують багаторядкові записи журналу.

Вбудовану команду fc (див. нижче SHELL BUILTIN COMMANDS) можна використати для показу або редагування та повторного виконання частини списку журналу. Вбудовану команду history може показувати або змінювати список журналу та керування файлом журналу. При використанні редагування командного рядка, в кожному режимі редагування, який надає доступ до списку журналу, доступні команди пошуку.

Оболонка дозволяє керувати тим, які команди зберігаються в списку журналу. Змінні HISTCONTROL і HISTIGNORE використовують для збереження лише пеану підмножину введених команд. Якщо увімкнено параметр оболонки cmdhist, він змушує оболонку намагатися зберегти кожен рядок багаторядкової команди в одному записі журналу, додаючи крапку з комою, де необхідно, щоб зберегти синтаксичну правильність. Параметр оболонки lithist змінює cmdhist шляхом збереження команди зі вставленими розривами рядків замість крапки з комою. Щоб дізнатись про налаштування та скасування параметрів оболонки, див. нижче опис вбудованої команди shopt під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ.

ДОПОВНЕННЯ ЗА ЖУРНАЛОМ

Оболонка підтримує функцію розгортання за журналом, подібну до розгортання за журналом в csh. У цьому розділі описано доступні синтаксичні засоби.

Типово, розгортання з журналу увімкнено для інтерактивних оболонок і його можна вимкнути за допомогою параметру +H вбудованої команди set (див. нижче ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ). Неінтерактивні оболонки типово не виконують розгортання за журналом, але його можна увімкнути за допомогою “set -H”.

Розширення журналу вводить слова зі списку журналу у вхідний потік, що дозволяє легко повторювати команди, вставляти аргументи попередньої команди в поточний рядок уведення або швидко виправляти помилки в попередніх командах.

Розгортання журналу виконується одразу після прочитання повного рядка, до того, як оболонка розіб'є його на слова, і виконується для кожного рядка окремо. Оболонка намагається повідомити функції розгортання за журналом про те, що екранування лапками з попередніх рядків все ще діє.

Процедура відбувається у два кроки. Перший — визначення того, який запис списку журналу використовувати під час заміни. Другий — вибір частини цього запису для включення до поточного.

Вибраний у журналі запис називається подією, а частини цього запису, обробку яких виконує оболонка, – це слова. Для роботи з вибраними словами доступні різні модифікатори. Запис розбивається на слова так само, як і під час читання вхідних даних, таким чином, що кілька слів, розділених метасимволом, які взято у лапки, вважаються одним словом. Позначення події вибирає подію, необов'язкове позначення слова вибирає слова з події, а також доступні різні додаткові модифікатори для роботи з вибраними словами.

Розгортання журналу впроваджуються за допомогою символу розгортання за журналом, типовим значенням якого є !. Розгортання журналу можуть з'являтися будь-де у вхідних даних, але не вкладаються одне в одне.

Екранувати символ розгортання за журналом можуть лише зворотна похила риска (\) та одинарні лапки, але символ розгортання за журналом також вважається лапкою, якщо він безпосередньо передує завершальним подвійним лапкам у рядку, взятому у подвійні лапки.

Деякі символи блокують розгортання за журналом, якщо з'являються зразу після символу розгортання за журналом, навіть якщо він не в лапках: пропуск, табуляція, новий рядок, повернення каретки, = та інші визначені вище метасимволи оболонки.

Існує спеціальне скорочення для підставляння, яке активне, якщо першим символом у рядку є символ швидкого підставляння (описаний вище у розділі hischar). Воно вибирає попередній запис списку журналу, використовуючи позначення події, еквівалентне !!, і замінює один рядок на інший у цьому записі. Це описано нижче в розділі Позначення подій. Це єдине розгортання за журналом, яке не починається із символу розгортання за журналом.

Для коригування поведінки розгортання за журналом можна скористатися декількома параметрами оболонки (див. опис вбудованої команди shopt нижче), якщо увімкнено параметр оболонки histverify і використано readline, заміни за журналом не буде негайно передано обробнику оболонки. Замість цього, розгорнутий рядок буде перезавантажено до буфера редагування readline для подальшого внесення змін. Якщо використано readline і увімкнено параметр оболонки histreedit, невдалу заміну за журналом буде перезавантажено до буфера редагування readline для виправлення.

Параметром -p вбудованої команди history можна скористатися для перегляду того, якими будуть результати доповнення за журналом, перш ніж ви ним скористаєтеся. Параметром -s вбудованої команди history можна скористатися для додавання команд наприкінці списку журналу без їхнього виконання, так, щоб ними можна було згодом скористатися, викликавши повторно.

Оболонка уможливлює керування різноманітними символами, які використовує механізм розгортання за журналом (див. опис histchars вище у розділі Змінні оболонки). Оболонка використовує символ коментування у журналі для створення часових позначок при записі файла журналу.

Показник подій

Показник подій — це посилання на запис у списку журналу. Позначення події складається з частини слова, що починається із символу розгортання за журналом і закінчується позначенням слова, якщо воно є, або кінцем слова. Якщо посилання не абсолютне, події є відносними до поточної позиції у списку журналу.

!
Розпочати заміну за журналом, якщо далі не вказано пропуск, символ нового рядка, символ повернення каретки, = або, якщо увімкнено параметр оболонки extglob за допомогою вбудованої команди shopt (.
!n
Посилання на запис n у списку журналу.
!-n
Посилання на поточний запис мінус n.
!!
Посилання на попередній запис. Синонім “!-1”.
!рядок
Вказує на найсвіжішу команду, яка передує поточній позиції у списку журналу і починається з рядка рядок.
!?рядок[?]
Вказує на найсвіжішу команду, яка передує поточній позиції у списку журналу і починається з рядка рядок. Кінцевий ? можна не вказувати, якщо після рядка одразу йде символ нового рядка. Якщо рядок не вказано, буде використано рядок з найсвіжішого пошуку. Якщо попереднього рядка пошуку не існує, буде повідомлено про помилку.
^string1^string2^
Швидке підставляння. Повторити попередню команду, замінивши рядок1 на рядок2. Еквівалент “!!:s^string1^string2^” (див. Модифікатори нижче).
!#
Увесь рядок команди, який уже введено.

Показники слів

Вказівники слів використовують для вибору бажаних слів з події. Вони є необов'язковими; якщо вказівник слова не надано, для розгортання за журналом буде використано усю подію. : відокремлює специфікацію події від вказівника слів. Двокрапку можна пропустити, якщо вказівник слова починається з ^, $, *, - або %. Слова нумерують з початку рядка. Перше слово матиме номер 0 (нуль). Слова буде вставлено до поточного рядка із відокремленням одинарним пробілом.

0 (нуль)
Нульове слово. Для оболонки це слово команди.
n-е слово.
^
Перший аргумент: слово 1.
$
Останнє слово. Зазвичай, це останній аргумент, але його буде розгорнуто до нульового слова, якщо у рядку буде лише одне слово.
%
Перше слово, знайдене за останнім пошуком “?string?” пошук, якщо рядок пошуку починається із символу, який є частиною слова. Типово пошук починається з кінця кожного рядка та продовжується до початку, тому перше слово, яке знайдено, — це те, яке перебуває найближче до кінця рядка.
Діапазон слів; “-y” є скороченням від “0-y”.
*
Усі слова, окрім нульового. “1-$”. Не є помилкою використання *, якщо у події точно одне слово; у такому випадку розгортається до порожнього рядка.
Скорочення від x-$.
Скорочення x-$, подібно до x*, але пропускає останнє слово. Якщо не вказано x, типовим значенням є 0.

Якщо вказано слово-визначення без специфікації події, як подію буде використано попередню команду, еквівалент !!.

Модифікатори

Після необов'язкового вказівника слова розгортання може включати послідовність одного або декількох наступних модифікаторів, перед кожним з яких має бути “:”. Модифікатори модифікують або змінюють слово або слова, які вибрано з події журналу.

Вилучити кінцевий компонент шляху, лишивши лише початок.
Вилучити усі початкові компоненти шляху, лишивши лише кінець.
Вилучити кінцевий суфікс у формі .xxx, лишивши лише основну назву.
Вилучити усе, окрім завершального суфікса.
Вивести нову команду, але не виконувати її.
Нейтралізувати підставлені слова, екрануючи подальші підставлення.
Нейтралізувати замінені слова, як з q, але з поділом на слова за пропусками або символами нового рядка. Модифікатори q і x є взаємно виключними; у розгортанні буде використано лише останній з використаних.
Замінити на новий перше входження запису старий у рядку події. Можна скористатися будь-яким символом як роздільником замість /. Кінцевий роздільник є необов'язковим, якщо він є останнім символом у рядку події. Одинарна зворотна похила риска нейтралізує роздільник у записах старий і новий. Якщо у записі новий використано &, його буде замінено на запис старий. Одинарний символ зворотної похилої риски нейтралізуватиме &. Якщо запис старий є порожнім, для нього буде встановлено останній замінений запис старий або, якщо попередніх замінників за журналом немає, останній рядок у пошуку !?рядок[?]. Якщо запис новий є порожнім, буде вилучено усі відповідні записи старий.
&
Повторити попередню підстановку.
Спричиняє застосування змін до усього рядка події Використовують у поєднанні із “:s” (приклад: “:gs/old/new/”) або “:&”. Якщо використано з “:s”, , можна скористатися будь-яким роздільником замість /, а кінцевий роздільник є необов'язковим, якщо він є останнім символом рядка події. a можна скористатися як синонімом g.
Застосувати наступний модифікатор “s” або “&” один раз до кожного слова у рядку подій.

ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ

Якщо не зазначено інакше, кожна вбудована команда, яку документовано у цьому розділі як таку, що приймає параметри із початковим -, приймає -- для позначення завершення параметрів. Вбудовані команди :, true, false і test/[ не приймають параметрів і не використовують -- в особливий спосіб. Вбудовані команди exit, logout, return, break, continue, let і shift приймають і обробляють аргументи, які починаються на -, без потреби у кінцевому --. Інші вбудовані команди, які приймають аргументи, але які не вказано як так, що приймають параметри, обробляють аргументи, що починаються з -, як некоректні параметри, і потребують -- для запобігання такій обробці.

: [аргументи]
Ні на що не впливає; команда нічого не робить, окрім розгортання аргументів і виконання будь-яких вказаних переспрямувань. Стан повернення є нульовим.
. [-p шлях] назва_файла [аргументи]
Команда . (source) зчитує та виконує команди з файла назва файла у поточному середовищі оболонки та повертає стан завершення останньої команди, виконаної з файла назва файла.
Якщо назва файла не містить похилої риски, . шукатиме його. Якщо вказано параметр -p, . обробляє шлях як список каталогів, розділених двокрапками, в яких слід знайти назву файла; інакше . використовує записи у PATH, щоб знайти каталог, що містить назва файла. Файл назва файла не обов'язково має бути виконуваним файлом. Коли bash не перебуває у режимі posix, програма шукає у поточному каталозі, якщо файла назва файла не знайдено у PATH, але не шукає в поточному каталозі, якщо вказано -p. Якщо параметр sourcepath вбудованої команди shopt вимкнено, . не шукає у PATH.
Якщо передано будь-які аргументи, вони стають позиційними параметрами під час виконання файла назва файла. В іншому випадку позиційні параметри залишаються незмінними.
Якщо увімкнено параметр -T, . успадковує будь-які перехоплення для DEBUG; якщо ні, будь-який рядок перехоплення DEBUG зберігається і відновлюється після виклику ., а . скидає перехоплення DEBUG під час його виконання. Якщо -T не встановлено, а вихідний файл змінює перехоплення DEBUG, нове значення зберігається після завершення .. Повернене значення — це стан останньої команди, виконаної з файла назва файла (0, якщо команди не виконано), і ненульове, якщо файла назва файла не знайдено або його не вдасться прочитати.
Без аргументів або з параметром -p alias виводить список альтернатив у формі alias назва=значення до стандартного виведення. Якщо вказано аргументи, альтернативу буде визначено для кожної назви, для якої вказано значення. Якщо у значенні є кінцевий пробіл, наступне слово для перевірки на заміну альтернатив при розгортанні альтернативи під час обробки команди. Для кожної назви у списку аргументів, для якого не вказано значення, буде виведено назву і значення назви альтернативи. alias повертає «істину», якщо вказано назву (без відповідного =значення), для яких визначено альтернативи.
Відновити усі призупинені завдання специфікація_завдання у фоновому режимі, так, наче їх було запущено з &. Якщо специфікація_завдання не вказано, буде використано дані оболонки щодо поточного завдання. bg специфікація_завдання повертає 0, якщо запущено керування завданнями, якщо запущено із керуванням завданнями, не буде виявлено якогось завдання із вказаною специфікацією_завдання, і не буде виявлено завдання, яке запущено без керування завданнями.
Вивести поточні прив'язки клавіш до функцій у readline, пов'язати послідовність клавіш із функцією, макросом readline або команду оболонки або встановити значення змінної readline. Кожне аргумент, який не є параметром, буде командою у форматі, який використовують у файлі ініціалізації readline, зокрема .inputrc, але кожну прив'язку або прив'язку слід передавати як окремий аргумент. Приклад: '"\C-x\C-r": re-read-init-file'. У наступному описі виведення, доступне для повторного зчитування, відформатовано як команди, які з'являтимуться у файлі ініціалізації readline або які будуть надані як окремі аргументи команді bind. Параметри, якщо їх вказано, мають такі призначення:
Скористатися прив'язкою_клавіш як прив'язкою клавіш, яка буде чинною для внесення змін у формі наступних прив'язок. Прийнятними назвами прив'язок_клавіш є emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command та vi-insert. vi є еквівалентом vi-command (vi-move також є синонімом); emacs є еквівалентом emacs-standard.
Показати список всіх функцій readline.
Показувати назви функцій та прив'язки readline таким чином, щоб їх можна було використовувати як аргумент наступної команди bind або у файлі ініціалізації readline. Якщо після обробки параметрів лишаються якісь аргументи, bind обробляє їх як назви команд readline і обмежує виведення цими назвами.
Вивести список назв функцій та прив'язок readline. Якщо після обробки параметрів лишаються якісь аргументи, bind обробляє їх як назви команд readline і обмежує виведення цими назвами.
Показати прив'язки послідовностей клавіш readline до макросів та рядків, які вони виводять у такий спосіб, щоб їх можна було повторно використати як аргумент наступної команди bind або у файлі ініціалізації readline.
Показати прив'язки послідовностей клавіш readline до макросів та рядків, які вони виводять.
Показати змінну readline та значення таким чином, щоб їх можна було використати як аргумент наступної команди bind або у файлі ініціалізації readline.
Показати список назв змінних readline та їхніх значень.
Прочитати прив'язки клавіш з файла назва_файла.
Показати послідовності клавіш, які викликають вказану за назвою функцію readline.
Відв'язати всі клавіші, прив'язані до іменованої функції readline.
Вилучити будь-які поточні прив'язки для keyseq.
Робить так, що при введенні послідовності клавіш посл_клавіш буде виконано команду-оболонки. Роздільником між посл_клавіш та команда-оболонки є або пробіл, або двокрапка (за бажанням), за якою йдуть пробіли. Якщо роздільником є ​​пробіли, команщда-оболонки має бути взята в подвійні лапки, а readline розгортає будь-які зі своїх спеціальних зворотних похилих рисок у команду-оболонки перед збереженням. Якщо роздільником є ​​двокрапка, будь-які зовнішні подвійні лапки є необов'язковими, а readline не розгортатиме рядок команди перед збереженням. Оскільки весь вираз прив'язки клавіш має бути одним аргументом, його слід взяти в одинарні лапки. При виконанні команди-оболонки оболонка встановлює для змінної READLINE_LINE значення вмісту буфера рядків readline, для змінних READLINE_POINT та READLINE_MARK значення поточного місця позиції вставлення та збереженої позиції вставлення (позначки), відповідно. Оболонка надає будь-який визначений користувачем числовий аргумент змінній READLINE_ARGUMENT. Якщо аргументу немає, змінна лишається невстановленою. Якщо виконана команда змінює значення будь-якої зі змінних READLINE_LINE, READLINE_POINT або READLINE_MARK, ці нові значення буде відтворено у стані редагування.
Вивести усі послідовності клавіш, які пов'язано із командами оболонки, та пов'язані команди у форматі, яким можна скористатися як аргументом для наступної команди bind.

Буде повернуто значення 0, якщо не використано нерозпізнаного параметра або не сталося помилки.

Вийти з циклу for, while, until або select. Якщо вказано n, break перериває виконання n вкладених циклів. n має бути ≥ 1. Якщо n перевищує кількість вкладених циклів, буде здійснено вихід з усіх циклів. Повернутим значенням буде 0, якщо n є більшим або рівним 1.
Виконати вказану вбудовану команду оболонки shell-builtin, передавши їй аргументи, і повернути її стан виходу. Корисно при визначенні функції, чия назва є такою самою, як вбудована команда оболонки, зі збереженням функціональних можливостей вбудованої команди у самій функції. У такий спосіб типово перевизначають вбудовану команду cd. Повернутим станом є «хибність», якщо не існує команди вбудована-команда-оболонки.
Повертає контекст будь-якого активного виклику підпрограми (функції оболонки або скрипту, яку виконано за допомогою вбудованих команд . або source).
Без зазначення виразу, caller виводить номер рядка і назву файла початкового коду поточного виклику підпрограми. Якщо як вираз використано додатне ціле число, caller виведе номер рядка, назву підпрограми та файл початкового коду, що відповідає відповідній позиції у поточному стосі викликів щодо виконання. Цими додатковими відомостями можна скористатися, наприклад, для виведення трасування стека. Поточний кадр є кадром із номером 0.
Повернутим значенням є 0, якщо оболонка виконує виклик підпрограми і вираз відповідає коректній позиції у стосі викликів.
cd [-L] [-@] [катало]
Змінити поточний каталог на каталог. Якщо каталог не вказано, як каталог буде використано значення змінної оболонки HOME. Якщо існує змінна CDPATH, і dir не починається з похилої риски (/), cd використовує її як шлях пошуку: оболонка шукає каталог у кожній назві каталогу з CDPATH. Альтернативні назви каталогів у CDPATH розділяють двокрапкою (:). Порожня назва каталогу у CDPATH еквівалентна поточному каталогу, тобто “.”.
The -P option causes cd to use the physical directory structure by resolving symbolic links while traversing dir and before processing instances of .. in dir (see also the -P option to the set builtin command).
The -L option forces cd to follow symbolic links by resolving the link after processing instances of .. in dir. If .. appears in dir, cd processes it by removing the immediately previous pathname component from dir, back to a slash or the beginning of dir, and verifying that the portion of dir it has processed to that point is still a valid directory name after removing the pathname component. If it is not a valid directory name, cd returns a non-zero status. If neither -L nor -P is supplied, cd behaves as if -L had been supplied.
Якщо параметр -e вказано разом з -P, і cd не може успішно визначити поточний робочий каталог після успішної зміни каталогу, оболонка повертає ненульовий статус.
У системах, у яких передбачено підтримку цією функції, параметр -@ представляє розширені атрибути, пов'язані з файлом, як каталогом.
Аргумент - перетворюється на $OLDPWD перед спробою зміни каталогу.
Якщо cd використовує непорожню назву каталогу з CDPATH, або якщо - є першим аргументом, і зміна каталогу успішна, cd записує абсолютний шлях до нового робочого каталогу до стандартного виведення.
Якщо каталог буде успішно змінено, cd встановлює для змінної середовища PWD значення назви нового каталогу, а для змінної середовища OLDPWD буде встановлено значення поточного робочого каталогу до зміни.
Повернене значення дорівнює true, якщо каталог було успішно змінено; false в іншому випадку.
Вбудована команда command виконує команду з аргументами, придушуючи звичайний пошук команди у функціях оболонки. Виконуються лише вбудовані команди або команди, знайдені у PATH з назвою команда. Якщо вказано параметр -p, пошук команди буде виконано з використанням типового значення для PATH, що гарантує знаходження усіх стандартних допоміжних програм.
Якщо вказано параметр -V або -v, command виводить опис команди. Параметр -v показує одне слово, що вказує на команду або назву файла, що використовується для виклику команди; параметр -V надає змогу отримати докладніший опис.
Якщо вказано параметр -V або -v, стан виходу дорівнюватиме нулю, якщо команду знайдено, і не дорівнюватиме нулю, якщо ні. Якщо жоден з параметрів не вказано і сталася помилка або команду не знайдена, стан виходу дорівнюватиме 127. В іншому випадку стан виходу вбудованої функції команда дорівнює стану виходу команди.
Створити можливі доповнення-відповідники для слова, відповідно до параметрів. Параметрами можуть бути будь-які параметри, які приймає вбудована команда complete за винятком -p, -r, -D, -E і -I. Відповідники буде записано до стандартного виведення.
Якщо вказано параметр -V, compgen зберігає створені автодоповнення у змінній — індексованому масиві назва_змінної замість того, щоб записувати їх до стандартного виведення.
При використанні параметрів -F і -C різноманітні змінні оболонки, встановлені можливостями з програмованого доповнення, хоча і будуть доступними, не матимуть придатних до використання значень.
Відповідники буде створено у той самий спосіб, наче їх було безпосередньо створено на основі специфікації доповнення із тими самими прапорцями кодом програмованого доповнення. Якщо вказано слово, буде виведено або збережено лише ті доповнення, які є відповідними слову.
Повернутим значенням буде true, якщо не вказано некоректного параметра або не було створено жодної відповідності.

[-G взірець] [-W список слів] [-F функція] [-C команда]
[-X взірець_фільтрування] [-P префікс] [-S суфікс] назва [назва ...]
Вказати, як має бути доповнено аргументи кожної із назв.
Якщо вказано параметр -p або не вказано жодних параметрів, буде виведено наявні специфікації у спосіб, який надає змогу повторно використати їх як вхідні дані. Використання параметра -r призведе до вилучення специфікації доповнення для кожної з назв або, якщо не вказано жодної назви, усіх специфікацій доповнення.
Використання параметра -D вказує на тек, що інші вказані параметри і дії слід застосувати до «типового» ( “default” ) доповнення команд; тобто доповнення, яке використовуватиметься для команд, для яких раніше не було визначено доповнення. Використання параметра -E вказує на те, що інші вказані параметри та дії слід застосувати до «порожнього» ( “empty” ) доповнення команд; тобто доповнення, яке використовують для порожнього рядка. Параметр -I вказує на те, що інші вказані параметри і дії слід застосувати до доповнення початкового слова, яке не є встановленням значення, у рядку або після роздільника команд, зокрема ; або |, тобто, зазвичай, доповнення назви команди. Якщо вказано декілька параметрів, -D має вищий пріоритет за -E, а обидва ці параметри мають вищий пріоритет за -I. Якщо вказано будь-який з параметрів -D, -E або -I, усі інші аргументи назва буде проігноровано; ці доповнення застосовуватимуться лише до випадку, який вказано параметром.
Процедуру застосування цих специфікацій доповнення при спробі доповнення слів описано вище у розділі above under Programmable Completion.
Інші параметри, якщо їх вказано, мають описані нижче призначення. Аргументи до параметрів -G, -W і -X (і, якщо потрібно, параметрів -P і -S) слід брати у лапки, щоб захистити їх від розгортання до виклику вбудованої команди complete.
параметр-доповнення контролює декілька аспектів поведінки compspec поза простою генерацією доповнень. параметр-доповнення може бути одним з:
Виконати решту типових доповнень bash, якщо compspec не генерує жодних відповідників.
Використати типове доповнення назви файлу з readline, якщо compspec не генерує жодних відповідників.
Виконати доповнення назви каталогу, якщо compspec не генерує жодних відповідників.
Повідомити readline, що назви файлів створює compspec, щоб уможливити будь-яку обробку, яка є специфічною до назв файлів (зокрема додавання символу похилої риски до назв каталогів, нейтралізацію спеціальних символів або придушення кінцевих пробілів). Призначено для використання у функціях оболонки.
Повідомити readline, що слід нейтралізувати усі доповнені слова, навіть якщо вони не є назвами файлів.
Повідомити readline, що не слід брати у лапки завершені слова, якщо вони є назвами файлів (типово, назви файлів беруть у лапки).
Повідомити readline, що не слід упорядковувати список можливих завершень за абеткою.
Повідомити readline, що не слід дописувати пробіл (типова поведінка) до слів, які завершуються на кінці рядка.
Після створення усіх відповідників, які визначено compspec, буде виконано спробу доповнення назви каталогу. Усі знайдені відповідники буде додано до результатів інших дій.
Для створення списку можливих завершень може бути використано одну з таких дій:
Альтернативні назви. Також можна вказати як -a.
Назви змінних-масивів.
Назви прив'язки клавіш у readline.
Назви вбудованих команд оболонки. Також можна вказати як -b.
команда
Назви команд. Також можна вказати як -c.
Назви каталогів. Також можна вказати як -d.
Назви вимкнених вбудованих команд оболонки.
Назви увімкнених вбудованих команд оболонки.
Назви експортованих змінних оболонки. Можна також вказати як -e.
файл
Назви файлів і каталогів, подібно до доповнення назв файлів у readline. Можна також вказати як -f.
Назви функцій оболонки.
Назви груп. Також можна вказати як -g.
Теми довідки, які приймає вбудована команда help.
Назви вузлів, як їх вказано у файлі, на який вказує змінна оболонки HOSTFILE.
Назви завдань, якщо активним є керування завданнями. Також можна вказати як -j.
Зарезервовані слова оболонки. Також можна вказати як -k.
Назви запущених завдань, якщо активним є керування завданнями.
Назви служб. Також можна вказати як -s.
Коректні аргументи до параметра -o вбудованої команди set.
Назви параметрів оболонки, які приймаються вбудованою командою shopt.
Назви сигналів.
Назви зупинених завдань, якщо активним є керування завданнями.
Імена користувачів. Також можна вказати як -u.
Назви усіх змінних оболонки. Можна також вказати як -v.
Команду буде виконано у середовищі підоболонки, а її виведені дані буде використано як можливі варіанти завершення. Аргументи передають так само, як і для параметра -F.
Функцію оболонки функція буде виконано у поточному середовищі оболонки. При виконанні функції першим аргументом ($1) буде назва команди, чиї аргументи слід доповнити, другим аргументом ($2) буде слово, яке слід доповнити, а третім аргументом ($3) буде слово, яке передує слову, яке слід доповнити, у поточному рядку команди. По завершенню обробки функції програмоване доповнення отримає можливі доповнення зі значення змінної-масиву COMPREPLY.
Для створення варіантів можливих завершень буде розгорнуто взірець шляхів заг_взірець.
На початку усіх можливих завершень після застосування усіх інших параметрів буде дописано префікс.
Наприкінці усіх можливих завершень після застосування усіх інших параметрів буде дописано суфікс.
Поділити список слів з використанням символів у спеціальній змінній IFS як роздільників, і розгорнути кожне отримане слово. У списку_слів буде використано нейтралізацію оболонки для забезпечення роботи механізму обробки слів, які містять метасимволи або символи оболонки, у значенні IFS. Можливими доповненнями є елементи списку-результату, який відповідає префіксу слова, пошук доповнення якого шукає оболонка.
взірець_фільтрування — взірець у форматі, який використовують для розгортання шляхів. Його буде застосовано до списку можливих доповнень, який створено попередніми параметрами та аргументами, а усі доповнення, які відповідають взірцю_фільтрування буде вилучено зі списку. Використання початкового ! у взірці_фільтрування призведе до обертання взірця. Таким чином, буде вилучено лише ті доповнення, які не збігаються із взірцем_фільтрування.

Повернутим значенням буде «істина», якщо не буде вказано некоректного параметра, не буде вказано параметра, відмінного від -p, -r, -D, -E або -I, без аргументу назва, не буде спроби вилучити специфікацію доповнення для назви, для якої не існує специфікації, або не станеться помилка під час додавання специфікації доповнення.

Змінити параметри автодоповнення для кожної назви відповідно до параметра або для автодоповнення, що виконується у поточний момент, якщо назва не вказано. Якщо параметр не вказано, буде показано параметри автодоповнення для кожної назви або поточного автодоповнення. Можливі значення параметра — це ті, які є дійсними для вбудованої функції complete, описаної вище.
Використання параметра -D вказує на тек, що інші вказані параметри слід застосувати до “default” доповнення команд; параметр -E вказує на те, що інші надані параметри має бути застосовано для “empty” доповнення команд; а параметр -I вказує на те, що інші надані параметри має бути застосовано для доповнення початкового слова у рядку. Їх визначають у той самий спосіб, що і для вбудованої команди complete.
Якщо вказано кілька параметрів, параметр -D має пріоритет над -E, і обидва параметри мають пріоритет над -I.
Повернутим значенням буде «істина», якщо не буде вказано некоректного параметра, не буде спроби змінити параметри для назви, для якої не існує специфікації доповнення, або не станеться помилки виведення.
continue відновлює наступну ітерацію зовнішнього циклу for, while, until або select. Якщо вказано n, bash відновлює виконання на n-му зовнішньому циклі. n має бути ≥ 1. Якщо n є більшим за кількість зовнішніх циклів, оболонка відновлює ітерацію на останньому зовнішньому циклі (циклі “top-level” ). Буде повернуто значення 0, якщо n не є більшим або рівним за 1.
Оголосити змінні та/або надати їм атрибути. Якщо не вказано назви, тоді буде виведено значення змінних або функцій. Параметр -p призведе до виведення атрибутів та значень кожної назви. Коли -p буде використано з аргументами назва, додаткові параметри, окрім -f та -F, буде проігноровано.
Якщо -p буде використано без аргументів назва, declare виведе атрибути та значення всіх змінних, що мають атрибути, визначені додатковими параметрами. Якщо з -p не використано інших параметрів, declare виведе атрибути та значення всіх змінних оболонки. Параметр -f обмежує виведені дані функціями оболонки.
Параметр -F забороняє виведення визначень функцій; буде виведено лише назву функції та її атрибути. Якщо увімкнено параметр оболонки extdebug за допомогою shopt, також буде виведено назву вихідного файла та номер рядка, де визначено кожен із записів назва. Використання параметра -F автоматично вмикає -f.
Параметр -g примусово створює або змінює змінні у загальній області видимості, навіть коли declare виконується у функції оболонки. Його буде проігноровано, якщо declare не виконується у функції оболонки.
Використання параметра -I призводить до того, що локальні змінні успадковують атрибути (за винятком атрибута nameref) та значення будь-якої наявної змінної з тією самою назвою у навколишній області видимості. Якщо наявної змінної немає, значення локальної змінної вважається спочатку не встановленим.
Наступними параметрами можна скористатися для обмеження виведення змінними із зазначеним атрибутом або для надання змінним атрибутів:
Кожна назва є індексованою змінною-масивом (див. Масиви above).
Кожна назва є асоціативною змінною-масивом (див. Масиви above).
Кожна назва є функцією оболонки.
Змінну буде оброблено як ціле число; арифметичні обчислення (див. АРИФМЕТИЧНІ ОБЧИСЛЕННЯ above) буде виконано під час встановлення значення для змінної.
При встановленні значення змінної усі літери верхнього регістру (великі) буде перетворено на літери нижнього регістру (малі). Атрибут верхнього регістру буде вимкнено.
Надати кожній назві атрибут nameref, зробивши її іменованим посиланням на іншу змінну. Ця інша змінна визначається значенням назви. Усі посилання, встановлення значень та внесення змін до атрибутів назви, окрім тих, у яких використано або змінено сам атрибут -n, буде виконано над змінною, на яку посилається значення назви. Атрибут nameref не можна застосовувати до змінних-масивів.
Зробити назви придатними лише для читання. Цим назвам потім не можна буде надати значення за допомогою інструкцій встановлення значень або скасувати встановлення значення.
Надати усім записам назва атрибут трасування. Трасовані функції успадковують пастки DEBUG і RETURN від оболонки, звідки їх викликано. Атрибут трасування не має особливого значення для змінних.
При встановленні значення змінної усі літери нижнього регістру (малі) буде перетворено на літери верхнього регістру (великі). Атрибут нижнього регістру буде вимкнено.
Позначити будь-які назви для експортування до наступних команд за допомогою середовища.

Використання “+” замість “-” Якщо скористатися «+» замість «-», атрибут буде вимкнено, за тим винятком, що +a і +A не можна використовувати для знищення змінних-масивів і +r не вилучатиме атрибут «лише читання».

Якщо їх використано у функції, команди declare і typeset роблять усі записи назва локальними, подібно до застосування команди local, якщо не вказано параметра -g. Якщо після назви змінної вказано =значення, для змінної буде встановлено значення значення. Якщо використано -a або -A і синтаксис складеного встановлення значень для створення змінних-масивів, додаткові атрибути не працюватимуть, ж до наступних встановлень значень.

Повернуте значення дорівнюватиме 0, аж доки не буде знайдено некоректний параметр, буде зроблено спробу визначити функцію за допомогою “-f foo=bar”, буде зроблено спробу встановити значення для призначеної лише для читання змінної, буде зроблено спробу встановити значення змінної-масиву без використання синтаксису складеного встановлення значення (див. Масиви above), , одна із назв не є назвою змінної оболонки, буде зроблено спробу вимкнути стан «лише для читання» для призначеної лише для читання змінної, буде зроблено спробу вимкнути стан масиву для змінної-масиву або буде зроблено спробу показати функції, якої не існує, за допомогою -f.

Без параметрів виводить список каталогів, які зараз запам’ятовуються. Типово назви каталогів виводяться в одному рядку, розділені пропусками. Каталоги додаються до списку за допомогою команди pushd; команда popd вилучає записи зі списку. Першим у стеку завжди є поточний каталог.
Параметри, якщо їх надано, мають таке значення:
Очищує стос каталогів вилученням усіх записів.
Створює список із використанням повних шляхів; у типовому форматі списку використовують тильду для позначення домашнього каталогу.
Вивести стос каталогів із одним записом на кожен рядок.
Вивести стос каталогів із одним записом на кожен рядок із додаванням до кожного запису його індексу у стосі.
+n
Показує n-ий запис, рахуючи зліва списку, показаного dirs при виклику без параметрів; відлік починається з нуля.
Показує n-ий запис, рахуючи справа списку, показаного dirs при виклику без параметрів; відлік починається з нуля.

Повертається значення 0, крім випадків, коли вказано недійсний параметр або індекси n виходять за кінець стеку каталогів.

Без параметрів вилучає усі ідентифікатори з таблиці активних завдань. Кожен ідентифікатор може бути специфікацією завдання або ідентифікатором процесу; якщо ідентифікатор збігається з ідентифікатором процесу, disown використовує завдання, що містить ідентифікатор процесу, як специфікацію завдання.
Якщо вказано параметр -h, disown не вилучає завдання, що відповідають кожному ідентифікатору, з таблиці завдань, а позначає їх, щоб оболонка не надсилала SIGHUP до завдання, якщо оболонка отримує SIGHUP.
Якщо не вказано ідентифікатор, параметр -a означає вилучення або позначення усіх завдань; параметр -r без аргументу ідентифікатор вилучає або позначає запущені завдання. Якщо ідентифікатор не вказано, і не вказано ні параметр -a, ні параметр -r, disown вилучає або позначає поточне завдання.
Буде повернуто значення 0, якщо ідентифікатор не визначає коректного завдання.
Вивести відокремлені пробілами аргументи, завершивши виведення символом нового рядка. Повернутим станом буде 0, якщо не станеться помилки запису. Якщо вказано -n, кінцевий символ нового рядка виведено не буде.
Якщо вказано -n, кінцевий символ нового рядка буде придушено echo. Якщо вказано параметр -e, буде увімкнено обробку вказаних нижче екранованих символом зворотної похилої риски символів. Параметр -E вимикає обробку цих екранованих символів, навіть у системах, де їх типово буде оброблено. Параметром оболонки xpg_echo можна скористатися для визначення того, чи echo оброблятиме усі параметри і розгортатиме ці екрановані символи. echo не оброблятиме --, як кінець параметрів.
echo обробляє такі керівні послідовності:
гудок (дзвінок)
backspace
приховати подальший вивід
символ скасування
подавання бланку
новий рядок
повернення каретки
горизонтальна табуляція
вертикальна табуляція
\\
зворотна похила
\0nnn
Восьмибітовий символ, значенням якого є вісімкове nnn (від нуля до трьох вісімкових цифр).
Восьмибітовий символ, значенням якого є шістнадцяткове значення HH (від однієї до двох шістнадцяткових цифр).
Символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHH (від однієї до чотирьох шістнадцяткових цифр).
Символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHHHHHH (від однієї до восьми шістнадцяткових цифр).

echo записує усі невідомі програмі символи з екрануванням зворотної похилою рискою без змін.

Увімкнути або вимкнути вбудовані команди оболонки. Вимикання вбудованої команди уможливлює використання виконуваного файла, який має таку саму назву, що і вбудована команда оболонки, який слід виконати без визначення повного шляху до файла, хоча, зазвичай, оболонка шукає вбудовані команди, перш ніж виконувати файли.
Якщо використано -n, буде вимкнено усі команди, які визначаються аргументом назва; якщо ж цей параметр не вказано, назви буде увімкнено. Наприклад, щоб скористатися виконуваним файлом test, який зберігається в одному з каталогів, описаних змінною PATH, а не відповідною вбудованою командою оболонки, слід віддати команду “enable -n test”.
Якщо не надано аргументів назва або якщо вказано параметр -p, буде виведено список вбудованих функцій оболонки. Якщо не буде вказано інших аргументів параметра, список міститиме усі увімкнені вбудовані функції оболонки. Якщо вказано -n, буде виведено лише вимкнені вбудовані функції. Якщо вказано -a, виведений список міститиме усі вбудовані функції, із зазначенням того, чи увімкнено кожну з них. Параметр -s означає обмеження виведених даних лише спеціальними вбудованими функціями POSIX
Параметр -f означає завантаження нової вбудованої команди назва зі спільного об'єкта назва файла на системах, де передбачено підтримку динамічного завантаження. Якщо назва файла не містить символу похилої риски, bash використовуватиме значення змінної BASH_LOADABLES_PATH як список каталогів, розділених двокрапками, в яких слід шукати файл назва файла. Типове значення для BASH_LOADABLES_PATH залежить від системи і може включати “.” для примусового обмеження пошуку поточним каталогом. Параметр -d вилучить вбудовану команду, яку було раніше завантажено за допомогою -f. Якщо -s використано з -f, нова вбудована команда стане спеціальною вбудованою командою POSIX
Якщо не вказано жодних параметрів, а назва не є вбудованою командою оболонки, enable спробує завантажити команду назва зі спільного об'єкта із назвою назва, ніби командою була “enable -f name name”.
Повернутим значенням є 0, якщо назва не є вбудованою командою оболонки або не станеться помилка під час завантаження нової вбудованої команди з об'єкта спільного використання.
Об'єднує аргументи в одну команду, розділяючи їх пробілами. Потім bash зчитує та виконує цю команду, і повертає її стан завершення як статус повернення eval. Якщо аргументів немає або є лише порожні аргументи, eval повертає 0.
Якщо вказано аргумент команда, ця команда замінить оболонку без створення нового процесу. Значенням команди не може бути вбудована команда або функція оболонки. Аргументи стануть аргументами команди. Якщо вказано параметр -l, оболонка додасть дефіс на початку нульового аргументу, переданого команді. Це те, що робить login(1). Використання параметра -c призводить до того, що команду буде виконано із порожнім середовищем. Якщо вказано параметр -a, оболонка передасть назву як нульовий аргумент виконаної команди.

Якщо команду не може бути виконано з певної причини, неінтерактивна оболонка завершить роботу, якщо не буде увімкнено параметра оболонки execfail. Якщо параметр оболонки буде увімкнено, буде повернуто повідомлення про помилку. Інтерактивна оболонка поверне повідомлення про помилку, якщо файл неможливо виконати. Підоболонка безумовно завершить роботу, якщо спроба виконати exec буде невдалою.
Якщо команду не буде вказано, буде виконано усі переспрямування у поточній оболонці і повернуто стан 0. Якщо станеться помилка переспрямування, буде повернуто стан 1.
Наказує оболонці завершити роботу із станом n. Якщо n не вказано, стан виходу визначатиметься станом виходу останньої виконаної команди. До завершення роботи оболонки буде виконано будь-яку пастку EXIT.
Надані назви буде позначено для автоматичного експортування у середовище наступних виконуваних команд. Якщо вказано параметр -f, назви посилаються на функції.
Параметр -n скасовує експортування, або вилучає атрибут експортування, з кожного запису назва. Якщо назви не вказано або якщо вказано лише параметр -p, export показує список назв усіх експортованих змінних на стандартному виведенні. Використання -p та -f призводить до показу експортованих функцій. Параметр -p показує виведення у формі, яку можна повторно використовувати як вхідні дані.
export надає змогу встановлювати значення змінної під час її експортування або скасування експортування шляхом додавання після назви змінної =значення. Для значення змінної буде встановлено значення з паралельною зміною атрибута експортування. export повертає код виходу 0, якщо не виявлено недійсного параметра, одна з назв не є дійсною назвою змінної оболонки, або -f вказано з аргументом назва, яке не є функцією.
Нічого не робити; повертає ненульовий стан.
Перша форма визначає діапазон команд у рядках від перший до останній у списку журналу і виводить їх для повторного виконання або редагування і повторного виконання. Значення перший і останній можна вказати як рядок (для виявлення останньої команди, яка починалася із вказаного рядка) або як номер (індекс у списку журналу, де від'ємні значення використовують як відступ від номера поточної команди).
У списку значення першого або останнього рівні 0 є еквівалентом -1, -0 є еквівалентом визначення поточної команди (зазвичай, команди fc). В інших випадках, 0 є еквівалентом -1, а -0 є некоректним значенням. Якщо останній не вказано, для нього буде встановлено значення поточної команди у списку (отже, “fc -l -10” виводить останні 10 команд) і до першого в інших випадках. Якщо значення перший не вказано, для нього буде встановлено значення, що відповідає попередній команді для редагування і -16 для списку.
Якщо вказано параметр -l, список команд буде виведено до стандартного виведення. Параметр -n придушує виведення номерів команд у списку. Параметр -r змінює порядок команд у списку на зворотний.
Otherwise, fc invokes the editor named by ename on a file containing those commands. If ename is not supplied, fc uses the value of the FCEDIT variable, and the value of EDITOR if FCEDIT is not set. If neither variable is set, fc uses vi. When editing is complete, fc reads the file containing the edited commands and echoes and executes them.
У другій формі fc повторно виконує команду після заміни кожного екземпляра взірця на замінник. Команду буде оброблено у той самий спосіб, що і аргумент перший вище.
Корисною альтернативою для використання з fc є “r=fc”-s(dq" отже, введення “r cc” виконує останню команду, починаючи з “cc” а введення “r” повторно виконує останню команду.
Якщо використано першу форму, буде повернуто нульове значення, якщо не буде виявлено некоректного параметра або якщо вказані перший або останній рядки журналу не належать до припустимого діапазону. При редагуванні та повторному виконанні файла з командами повернутим значення буде повернуте значення останньої виконаної команди або помилка, якщо станеться помилка із тимчасовим файлом. Якщо використано другу форму, повернутим станом буде стан повторно виконаної команди, якщо команда не задає коректного запису журналу. У інших випадках fc повертає ненульовий стан виходу.
Відновити роботу завдання специфікація_завдання в основному режимі і зробити його поточним завданням. Якщо аргументу специфікація_завдання не вказано, буде використано дані оболонки щодо поточного завдання. Повернутим значенням буде значення, яке повернуто командою, яку переведено в основний режим, або повідомлення про помилку, якщо запущено із вимкненим керуванням завданнями або, якщо запущено з увімкненим керуванням завданнями, якщо специфікація_завдання не визначає коректного завдання або специфікація_завдання визначає завдання. яке було запущено без керування завданнями.
getopts використовують підпрограми оболонки для обробки позиційних параметрів. Аргумент рядок_параметрів містить символи параметрів, які слід розпізнати; якщо після символу вказано двокрапку, параметр повинен мати аргумент, який слід відокремити від параметра пробілом. Символами параметра не можуть бути символи двокрапки та знаку питання.
Під час кожного виклику getopts додає наступний параметр до змінної середовища назва, ініціалізуючи змінну назва, якщо її не існує, а індекс наступного аргументу, який має бути оброблено, буде записано до змінної OPTIND. OPTIND буде ініціалізовано до 1 кожного разу, коли буде викликано оболонку або скрипт оболонки. Якщо параметр потребує аргументу, getopts записує аргумент до змінної OPTARG.
Оболонка не виконує автоматично скидання OPTIND; змінну слід скидати вручну між викликами getopts у межах одного виклику оболонки, якщо слід змінити набір параметрів.
Якщо буде виявлено кінець параметрів, getopts завершить роботу із поверненим значенням, що перевищує нуль. Для OPTIND буде встановлено індекс першого відмінного від параметра аргументу і для назви буде встановлено значення ?.
Зазвичай, getopts обробляє позиційні параметри, але якщо вказано додаткові значення, як значення аргумент, getopts оброблятиме ці аргументи замість позиційних параметрів.
getopts може повідомляти про помилки у два способи. Якщо першим символом рядка_параметрів є двокрапка, getopts використає мовчазний режим звітування про помилки. У звичному режимі роботи getopts виведе діагностичні повідомлення, якщо буде виявлено некоректні параметри або пропущені аргументи параметрів. Якщо для змінної OPTERR встановлено значення 0, getopts не покаже жодних повідомлень про помилки, навіть якщо першим символом рядка_параметрів не буде двокрапка.
Якщо getopts виявить некоректний параметр, програма запише ? до назва і, якщо команда працює не у мовчазному режимі, виводить повідомлення про помилку і скасовує встановлення значення OPTARG. Якщо getopts працює у мовчазному режимі, програма встановить значення символу знайденого параметра для OPTARG, а діагностичне повідомлення виведено не буде.
Якщо не буде знайдено обов'язкового аргументу і getopts працює не у мовчазному режимі, для назви буде встановлено значення знаку питання (?) для назви, скасовано визначення OPTARG і виведено діагностичне повідомлення. Якщо getopts працює у мовчазному режимі, для назви буде встановлено значення двокрапки (:) для назви, для OPTARG буде встановлено значення знайденого символу параметра.
getopts повертає «істину», якщо буде знайдено параметр, вказаний або невказаний. Повертає «хибність», якщо буде виявлено кінець параметрів або станеться помилка.
Щоразу, коли викликають hash, команда запам'ятовує повний шлях команди назва, визначений шляхом пошуку у каталогах $PATH. Будь-який раніше збережений шлях, пов'язаний з назвою, буде відкинуто. Якщо вказано параметр -p, hash використовує назву файла як повний шлях команди.
Параметр -r наказує оболонці забути всі збережені місця. Надання значення змінній PATH також очищує всі хешовані назви файлів. Параметр -d наказує оболонці забути збережені місця розташування усіх назв.
Якщо вказано параметр -t, hash виведе повний шлях, що відповідає кожному запису назва. Якщо з -t вказано кілька аргументів назва, hash виведе назву перед відповідним хешованим повним шляхом. Параметр -l наказує програмі вивести дані у форматі, який можна повторно використовувати як вхідні дані.
Якщо аргументи не вказано або якщо вказано лише -l, hash виводить дані щодо збережених команд. Параметри -t, -d та -p (параметри, які діють на аргументи назва) є взаємовиключними. Активним буде лише один. Якщо вказано більше одного, -t має вищий пріоритет, ніж -p, і обидва мають вищий пріоритет, ніж -d.
Стан повернення дорівнює нулю, якщо не знайдено назви або не надано недійсний параметр.
Показати корисні відомості щодо вбудованих команд. Якщо вказано взірець, help надає докладну довідку для усіх команд, назви яких відповідають взірцю взірець, як описано нижче. Якщо взірець не вказано, виводить список для усіх вбудованих команд і складених команд оболонки.
Параметри, якщо їх надано, мають таке значення:
-d
Показати короткий опис для кожного взірця
Показати опис кожного взірця у форматі, який подібний до сторінок підручника
Показати лише короткий опис користування для кожного взірця
Якщо взірець містить символи відповідності взірцю (див. Відповідність за взірцем вище), його буде оброблено як взірець оболонки, а help виведе опис усіх тем довідки, що відповідає взірцю.
Якщо ні, і взірець точно збігається з назвою теми довідки, help виведе опис, пов'язаний з цією темою. В іншому випадку help виконає зіставлення префіксів і виведе описи всіх відповідних тем довідки.
Стан повернення буде рівним 0, якщо буде знайдено хоча б одну команду, яка відповідає взірцю.
Без параметрів, вивести список журналу команд з номерами рядків. Записи з префіксами * змінено. З аргументом n перелічує лише останні n записів. Якщо змінна оболонки HISTTIMEFORMAT встановлена і не є порожньою, вона використовується як форматний рядок для strftime(3), щоб показати мітку часу, пов'язану з кожним показаним записом журналу. Якщо для history використано HISTTIMEFORMAT, проміжний інтервал між відформатованою позначкою часу та записом журналу виведено не буде.
Якщо вказано назву файла, history використає її як назву файла журналу; якщо ні, буде використано значення HISTFILE. Якщо назву файла не вказано, а HISTFILE не встановлено або має порожнє значення, параметри -a, -n, -r, та -w ні на що не вплинуть.
Параметри, якщо їх надано, мають таке значення:
Спорожнити список журналу вилученням з нього усіх записів. Можна користуватися з іншими параметрами для заміни списку журналу.
Вилучити запис журналу на позиції відступ. Якщо значення відступ є від'ємним, його буде відраховано назад від позиції, яка на одиницю більша за останню позицію у журналі. Отже, від'ємні індекси відраховують від кінця журналу, а індекс -1 означає поточну команду history -d.
Вилучити з журналу діапазон записів між позиціями початок і кінець, включно. Додатні і від'ємні значення початок і кінець буде оброблено в описаний вище спосіб.
Дописати “new” рядки журналу до файла журналу. Це рядки журналу, які введено з моменту початку поточного сеансу bash, але які ще не дописано до файла журналу.
Прочитати рядки журналу, які ще не прочитано з файла журналу, і додати їх до поточного списку журналу. Це рядки, які дописано до файла журналу з моменту початку поточного сеансу bash.
Прочитати файл журналу і дописати його вміст до поточного списку журналу.
Записати поточний список журналу до файла журналу, перезаписавши вміст файла журналу.
Виконати заміну за журналом для наступних аргументів і вивести результат до стандартного виведення без збереження результатів до списку журналу. Для вимикання звичного розгортання за журналом усі аргументи має бути взято у лапки.
Зберегти аргументи у списку журналу як єдиний запис. Перед додаванням аргументів останню команду у списку журналу буде вилучено.
Якщо встановлено змінну HISTTIMEFORMAT, інформацію щодо мітки часу, пов'язаної з кожним записом журналу history записує до файла журналу, з позначкою символу коментаря журналу, як це описано вище. Коли файл журналу зчитується, рядки, що починаються з символу коментарю, після якого одразу йде цифра, інтерпретуються, як мітки часу для відповідного запису журналу.
Повернутим значенням буде 0, якщо усі параметри коректні, на сталося помилки під час читання або запису файлу журналу, на надано неправильного аргументу відступ або діапазону для -d, або помилка під час розгортання за журналом, наданого як аргумент до -p.
Перша форма показує активні завдання. Параметри мають наступні значення:
Вивести список ідентифікаторів процесів разом з іншою інформацією.
Вивести відомості лише про завдання, стан яких було змінено з моменту, коли користувача востаннє інформували про їхній стан.
Вивести лише ідентифікатор процесу, який є лідером групи процесів завдання.
Показати лише завдання, що працюють.
Показати лише зупинені завдання.
Якщо вказано аргумент специфікація_завдання, jobs обмежуватиме виведення відомостями щодо відповідного завдання. Буде повернуто стан 0, якщо не буде виявлено некоректного параметра або некоректної заданої специфікації_завдання.
Якщо надано опцію -x, jobs замінює будь-який jobspec, знайдений в command або args відповідним ІД групи процесів, та виконує command передаючи йому args, і вертаючи його стан виходу.
Надсилає сигнал, визначений специфікацією_сигналу або номером сигналу, процесам, вказаним кожним ідентифікатором. Кожен ідентифікатор може бути специфікацією завдання або ідентифікатором процесу. специфікація_сигналу — це або назва сигналу без урахування регістру, наприклад SIGKILL (з префіксом SIG або без нього), або номер сигналу; номер сигналу — це номер сигналу. Якщо специфікацію сигналу не вказано, то kill надсилає SIGTERM.
Використання параметра -l призводить до виведення назв сигналів. Якщо при заданому параметрі -l надано будь-які аргументи, kill виводить назви сигналів, що відповідають аргументам, а стан виходу дорівнює 0. Аргумент стан_виходу функції -l – це число, що визначає або номер сигналу, або стан завершення процесу, завершеного сигналом; якщо його вказано, kill виводить назву сигналу, який спричинив завершення процесу. kill припускає, що стани завершення процесу перевищують 128; всі значення, які є меншими за це, є номером сигналу. Параметр -L еквівалентний -l.
kill повертає true, якщо було успішно надіслано принаймні один сигнал, і false, якщо сталася помилка або було виявлено некоректний параметр.
Кожен аргумент є арифметичним виразом, який треба обчислити (див. АРИФМЕТИЧНЕ ОЦІНЮВАННЯ above). Якщо останній arg обраховано в 0, let вертає 1; інакше буде повернуто 0.
Для кожного аргументу створює локальну змінну з назвою назва і надає їй значення. Значенням параметра може бути будь-який з параметрів, які приймає declare. Якщо local буде використано всередині функції, область видимості змінної назва обмежена цією функцією та її дочірніми екземплярами. Використання local поза межами функції є помилкою.
Якщо назва дорівнює -, це робить набір параметрів оболонки локальним для функції, з якої викликано local: будь-які параметри оболонки, змінені за допомогою вбудованої функції set всередині функції після виклику local, відновлюються до своїх початкових значень після повернення значення з функції. Відновлення виконується так, ніби було виконано серію команд set для відновлення значень, такими, які вони були до запуску функції.
Без операндів local записує список локальних змінних до стандартного виведення.
Буде повернуто стан 0, якщо local не використано поза функцією, не було вказано некоректного значення назва, або не було вказано придатної лише для читання назви змінної.
Вийти з оболонки входу до системи, повернувши стан n до батьківського процесу оболонки.
Прочитати рядки зі стандартного джерела вхідних даних до змінної — індексованого масиву масив, або прочитати ці дані з файла із дескриптором дескриптор_файла, якщо вказано параметр -u. Типовим масивом є змінна MAPFILE. Параметри, якщо їх вказано, мають такі призначення:
Перший символ із роздільник використовується для закінчення кожного рядка введення замість символу нового рядка. Якщо рядок роздільник порожній, mapfile закінчить рядок, коли прочитає символ NUL.
Скопіювати не більше кількість рядків. Якщо значенням кількість є 0, буде скопійовано усі рядки.
Розпочати встановлення значень масиву з індексу початок. Типовим індексом є 0.
Відкинути перших count прочитаних рядків.
Вилучити кінцевий роздільник (типовим роздільником є символ нового рядка) з кожного прочитаного рядка.
Прочитати рядки з файла із дескриптором дескриптор_файла, а не зі стандартного джерела вхідних даних.
Обчислювати зворотний_виклик кожного разу, коли буде прочитано частку рядків. Частку буде задано параметром -c.
Вказати кількість рядків, які буде прочитано між послідовними викликами зворотного_виклику.
Якщо -C вказано без -c, типовий квант дорівнює 5000. Коли обчислюється callback оцінюється, йому, як додаткові аргументи, надаються індекс наступного елемента масиву, який потрібно присвоїти, і рядок, який потрібно присвоїти цьому елементу. callback обчислюється після прочитання рядка, але до присвоєння значення елементу масиву.
Якщо початок не вказано явно, mapfile спорожнить масив до встановлення для нього значень.
mapfile повертає нуль, якщо не буде виявлено некоректних параметрів або аргументів параметрів, якщо масив не буде некоректним або таким, для якого не можна встановлювати значення, і якщо масив є індексованим масивом.
Вилучає запис зі стосу каталогів. Нумерація елементів виконується з 0 з першого каталогу зі списку dirs, отже popd є еквівалентним “popd +0.” Без аргументів вилучає верхній каталог зі стосу і переходить до нового верхнього каталогу. Аргументи, якщо вказано, мають таке значення:
Придушує звичайну зміну каталогу при вилученні каталогів зі стосу, отже, дії відбуваються лише із стосом.
+n
Вилучає n-ий запис, рахуючи зліва списку, показаного dirs; відлік починається з нуля зі стосу. Приклад: “popd +0” вилучає перший каталог, “popd +1” другий.
Вилучає n-ий запис, рахуючи справа списку, показаного dirs; відлік починається з нуля. Приклад: “popd -0” вилучає останній каталог, “popd -1” передостанній.
Якщо до верхнього елемента у стосі каталогів буде внесено зміни, і було вказано параметр B, popd використовує вбудовану команду cd для переходу до каталогу на вершині стосу. Якщо спроба виконання cd завершиться невдало, popd поверне ненульове значення.
У інших випадках popd повертає значення «хибність», якщо буде виявлено некоректний параметр, стос каталогів є порожнім або вказано запис стосу каталогів, якого не існує.
Якщо виконання команди popd буде успішним, bash поверне dirs, щоб показати остаточний вміст стосу каталогів, і поверне стан 0.
Записати сформатовані аргументи до стандартного виходу під контролем формат. Опція -v призначає вивід змінній var замість друкування на стандартний вихід.
Формат є символьним рядком, що містить три типи об'єктів: звичайні символи, що просто копіюються на стандартний вихід, керівна послідовність символів, які перетворюємо і копіюємо на стандартний вихід, та специфікації формату, кожна з яких друкує наступний подальший аргумент. Окрім стандартних символів формату printf(3) cCsSndiouxXeEfFgGaA, printf інтерпретує наступні додаткові специфікатори форматування:
%b
примушує printf розкривати керівні послідовності із символом зворотної похилої риски відповідно до аргументу, так само як echo -e.
%q
змушує printf виводити відповідний аргумент у форматі, який можна повторно використовувати як вхідні дані оболонки. %q та %Q використовують стиль лапок $'', якщо будь-які символи в рядку аргументу цього вимагають, та зворотну похилу риску в іншому випадку. Якщо рядок формату використовує альтернативну форму printf, в обох цих форматах екранування рядка аргументу слід виконувати за допомогою одинарних лапок.
%Q
подібний до %q, але застосовує будь-яку надану точність до аргументу аргумент до його нейтралізації.
%(формат_дати)T
примушує printf виводити рядок дати-часу, що є результатом використання datefmt, як рядку формату для strftime(3). Відповідне argument є цілим числом, що відповідає кількості секунд з початку епохи. Для цього специфікатора форматування передбачено розпізнавання двох спецзначень: -1 представляє поточний час, і -2 представляє час, коли було запущено оболонку. Якщо аргументів не вказано, конвертація поводиться, ніби надано -1. Це є винятком зі звичайної поведінки printf.
Специфікатори форматування %b, %q та %T всі використовують аргументи ширини та точності поля зі специфікації формату та записують стільки байтів з (або використовують для того широкого поля) розширеного аргументу, що за звичай має більше символів, ніж оригінал.
Специфікатор формату %n приймає відповідний аргумент, який буде оброблено як назву змінної оболонки.
Специфікатори формату %s та %c приймають модифікатор l (long), який змушує їх перетворювати рядок аргументу на рядок із широкими символами та застосовувати будь-яку надану ширину поля та точність у символах, а не в байтах. Специфікатори формату %S та %C еквівалентні %ls та %lc відповідно.
Аргументи для специфікаторів нерядкових форматів розглядаються як константи C, за винятком, коли дозволено передній знак плюса чи мінуса, і якщо передній символ є одинарною або подвійною лапкою, значенням є числові значення наступного символу з використанням поточної локалі.
Формат буде використано належну кількість разів для форматування усіх аргументів. Якщо у форматі визначено більше аргументів, ніж вказано, зайві специфікації формату буде оброблено так, наче їм передано нульові значення або порожні рядки, відповідно. Повернутим значенням буде нуль при успіху і значення, яке є відмінним від нуля, якщо буде надано некоректний параметр або станеться помилка запису або призначення.
Додає каталог на верхівку стосу або обертах стос так, щоб на верхівці опинився поточний робочий каталог. Якщо не вказано аргументів, pushd міняє місцями два верхніх елементи стосу каталогів. Аргументи, якщо їх вказано, мають таке призначення:
Придушує звичайну зміну каталогу при ротації або додаванні каталогів до стосу, отже, дії відбуваються лише із стосом.
+n
Прокручує стек так, щоб n-ий каталог (відлік ведеться з лівої частини списку, показаного dirs і починається з нуля) опинився на вершині списку.
Прокручує стек так, щоб n-ий каталог (відлік ведеться з правої частини списку, показаного dirs і починається з нуля) опинився на вершині списку.
каталог
Додає каталог до стосу каталогів на верхню позицію.
Після внесення змін до стосу, якщо було вказано параметр -n, pushd використовує вбудовану команду cd для переходу до каталогу на вершині стосу. Якщо спроба виконання cd завершиться невдало, pushd поверне ненульове значення.
В інших випадках, якщо не вказано аргументів, pushd повертає 0, якщо стос каталогів не є порожнім. При циклічному переході стосом каталогів pushd повертає 0, якщо стос каталогів не є порожнім або буде вказано елемент n стосу каталогів, якого не існує.
Якщо виконання команди pushd буде успішним, bash поверне dirs, щоб показати остаточний вміст стосу каталогів.
Надрукувати абсолютний шлях поточного робочого каталогу. Якщо додано параметр -P або ввімкнено фізичний параметр -o для вбудованої команди set, надрукований шлях не міститиме символьних посилань. Якщо використовується параметр -L, надрукований шлях може містити символьні посилання. Стан повернення дорівнює 0, якщо під час читання назви поточного каталогу не виникло помилки і вказано лише дійсні параметри.
Буде прочитано один рядок зі стандартного джерела вхідних даних або з файла із дескриптором дескриптор_файла, який передано як аргумент параметра -u, рядок буде поділено на слова, як це описано above у розділі Поділ на слова, і перше слово стане значенням першої назви, друге слово — другої назви тощо. Якщо кількість слів буде більшою за кількість назв, залишок списку слів разом із роздільниками стане значенням останньої назви. Якщо з потоку вхідних даних буде прочитано менше слів, ніж назв, решті назв буде надано порожні значення. Для поділу рядка на слова буде використано символи у значення зі змінної IFS. Також буде використано ті самі правила, які оболонка використовує для розгортання (описано above у розділі Поділ на слова). Для усування спеціального призначення наступного прочитаного символу або для позначення продовження рядка можна скористатися символом зворотної похилої риски (\).
Параметри, якщо їх надано, мають таке значення:
Слова присвоюються послідовним індексам змінної-масиву aname, починаючи з 0. aname є не встановленим перед присвоєнням нових значень. Інші аргументи назва нехтуються.
Перший символ із роздільник використовується для закінчення кожного рядка введення замість символу нового рядка. Якщо рядок роздільник порожній, read закінчить рядок, коли прочитає символ NUL.
Якщо стандартні вхідні дані надходять з термінала, для отримання рядка read буде використано readline (див. READLINE above) readline використовує поточні (або типові, якщо редагування рядків раніше не було активним) параметри редагування, але використовує типове доповнення назв файлів самої бібліотеки Readline.
Якщо стандартні вхідні дані надходять з термінала, для отримання рядка read буде використано readline (див. READLINE above) для отримання рядка. Readline використовує поточні (або типові, якщо редагування рядків раніше не було активним) параметри редагування, але використовує типове доповнення назв файлів bash, включно із програмованим доповненням.
Якщо readline використовується для читання рядка, перед початком редагування read розміщує у буфері редагування текст.
read повертається після прочитання кількість_символів символів, а не очікує повного рядка введення, якщо не натрапить на символ кінця файла або буде перевищено час очікування на дані від read, але зважає на роздільник, якщо перед роздільником прочитано менше ніж кількість_символів символів.
read повертається після прочитання саме кількість_символів символів, а не чекає на повний рядок введення, якщо не зустрічається EOF або read не перестає працювати. Усі символи-роздільники, які зустрічаються у введених даних, не обробляються спеціально і не викликають повернення з read, аж доки не буде прочитано кількість_символів символів. Результат не розбивається на символи в IFS; сенс у тому, що змінній примвоюються саме прочитані символи (за винятком зворотної похилої риски; див. нижче параметр -r).
Вивести запит до стандартного виведення помилок, без кінцевого символу нового рядка, до спроб читання будь-яких вхідних даних, але лише якщо вхідні дані надходять з термінала.
Символ зворотної похилої риски не працює як символ екранування. При цьому, символ зворотної похилої риски вважається частиною рядка. Зокрема, пару «зворотна похила риска — новий рядок» не можна використовувати як послідовність продовження рядка.
Мовчазний режим. Якщо ввід йде з термінала, символи не відбиваються на вивід.
Спричиняє перевищення часу очікування у read і повертає повідомлення про помилку, якщо не буде прочитано повний рядок вхідних даних (або вказану кількість символів) протягом час_очікування секунд. Часом очікування може бути десяткове число із дробовою частиною після десяткової крапки. Цей параметр працюватиме, лише якщо read читає вхідні дані з термінала, каналу або іншого особливого файла — він не працюватиме при читанні зі звичайних файлів. При перевищенні часу очікування у read команда зберігає будь-які частково прочитані вхідні дані до вказаної змінної назва, а станом виходу буде число, більше за 128. Якщо значенням часу_очікування є 0, read повертатиме керування негайно, без спроби прочитати якісь дані. У цьому випадку станом виходу є 0, якщо вхідні дані доступні для файла із вказаним дескриптором або читання поверне EOF. Якщо це не так, стан повернення буде ненульовим.
Прочитати вхідні дані з файла із дескриптором дескриптор_файла, а не зі стандартного джерела вхідних даних.
Окрім випадків, коли роздільник є порожнім рядком, read ігноруватиме усі символи NUL у вхідних даних.
Якщо не вказано назв, прочитаний рядок, без кінцевого роздільника, але без інших змін, буде встановлено як значення для змінної REPLY.
Станом виходу буде нуль, якщо не буде виявлено символу кінця файла, не буде перевищено час очікування на завершення read (у цьому випадку стан завершення перевищуватиме 128), не буде помилки встановлення значення (зокрема, встановлення значення для змінної, яку призначено лише для читання) або не буде вказано некоректного дескриптора файла як аргументу -u.
Вказані назви буде позначено як так, які призначено лише для читання; значення цих назв не можна буде змінити наступними інструкціями зі встановлення або скасування встановлення значень. Якщо вказано параметр -f, кожна назва вважатиметься функцією оболонки. Використання параметра -a обмежує змінні лише індексованими масивами, а параметра -A — лише асоціативними масивами. Якщо вказано обидва параметри, пріоритет матиме -A. Якщо аргументів назва не вказано, або якщо вказано параметр -p, буде виведено список усіх придатних лише для читання назв. Для обмеження виведених даних піднабором набору призначених лише для читання назв можна скористатися іншими параметрами. Параметр -p призводить до виведення у форматі, яким можна скористатися як вхідними даними.
readonly дозволяє встановлювати значення змінної одночасно зі зміною атрибута «лише читання», додаючи після назви змінної =значення. Це встановлює для змінної значення під час зміни атрибута «лише читання».
Стан повернення дорівнює 0, якщо не виявлено недійсний параметр, одна з назв є некоректною назвою змінної оболонки, або -f вказано з назвою, яке не є функцією.
Зупинити виконання функції оболонки або початкового файла і повернути значення, вказане n, туди, звідки надійшов виклик. Якщо n пропущено, поверненим станом буде стан останньої виконаної команди. Якщо return виконується обробником перехоплень, останньою командою, яка використовується для визначення стану, буде остання команда, виконана перед обробником перехоплень. Якщо return виконується під час перехоплення DEBUG, останньою командою, яка використовується для визначення стану, буде остання команда, виконана обробником перехоплень перед викликом return.
Якщо return використовують для завершення виконання скрипту, що виконується командою . (source), оболонка зупиняє виконання цього скрипту і повертає або n, або стан завершення останньої команди, виконаної в скрипті, як стан завершення скрипту. Якщо вказано n, повернутим значенням буде його найменш значущі 8 бітів.
Будь-яка команда, пов'язана з перехопленням RETURN, виконується до того, як виконання відновиться після функції або скрипту.
Стан повернення буде ненульовим, якщо return передано як нечисловий аргумент або використовується поза функцією, а не під час виконання скрипту за допомогою . або source.
Без параметрів, буде виведено назву і значення усіх змінних оболонки у форматі, яким можна повторно скористатися як вхідними даними для встановлення або повторного встановлення поточного набору змінних. Значення змінних, які призначено лише для читання, не може бути змінено. У режимі posix буде виведено лише змінні оболонки. Виведені дані буде упорядковано відповідно до поточної локалі. Якщо вказано параметри, вони встановлюватимуть значення або скасовуватимуть встановлення значення атрибутів оболонки. Усі аргументи, які лишаться після обробки параметрів, вважатимуться значенням позиційний параметрів. Їх буде використано як значення, за порядком, $1, $2, ..., $n. Параметри, якщо їх вказано, мають таке призначення:
Кожній змінній або функції, що створюється або змінюється, надається атрибут експорту та позначка для експорту в середовище наступних команд.
Повідомляти про стан припинених фонових завдань негайно, а не перед наступним основним запитом або після завершення роботи основної команди. Діє лише тоді, коли увімкнено керування завданнями.
Вийти негайно, якщо конвеєр (який може місити одну просту команду), список або складена команда (див. ГРАМАТИКА ОБОЛОНКИ above), завершується з ненульовим станом. Вихід з оболонки не відбувається, якщо команда, яка не працює, є частиною списку команд відразу після зарезервованого слова while або until, частиною тесту після зарезервованих слів if або elif, частиною будь-якої команди, виконуваної в списках && або ||, за винятком команди після останнього && або ||, будь-якою командою в конвеєрі, крім останньої (відповідно до стану параметра оболонки pipefail), або якщо повернуте командою значення інвертовано за допомогою !. Якщо складена команда, відмінна від підоболонки, повертає ненульовий стан через невдачу команди тоді, коли нехтувалося -e, вихід з оболонки не відбувається. Якщо встановлено пастку на ERR, вона виконується перед виходом із оболонки. Цей параметр застосовується до середовища оболонки та кожного із середовищ підоболонки окремо (див. СЕРЕДОВИЩЕ ВИКОНАННЯ КОМАНД above), , і може призвести до виходу з підоболонки, перш ніж у ній буде виконано всі команди.
Якщо складена команда або функція оболонки виконується в контексті, де нехтується -e, на жодну з команд, виконуваних у межах складеної команди або тіла функції, не вплине параметр -e, навіть якщо -e встановлено і команда повертає стан відмови. Якщо складена команда або функція оболонки встановлює -e під час виконання в контексті, де -e нехтується, це налаштування не матиме жодного ефекту до завершення складеної команди або команди, що містить виклик функції.
Вимкнути розгортання шляхів.
Запам'ятати розташування команд, у якому оболонка шукає їх для виконання. Типово увімкнено.
Усі аргументи у формі інструкцій із встановлення значень, а не лише ті, які передують назві команди, буде записано до середовища для команди.
Режим спостереження. Керування завданнями увімкнено. Типово, цей параметр увімкнено для інтерактивних оболонок у системах, де передбачено таку підтримку (див. КЕРУВАННЯ ЗАВДАННЯМИ above). Усі процеси працюватимуть в окремій групі процесів. При завершенні фонового завдання оболонка виведе рядок зі станом виходу завдання.
Прочитати команди, але не виконувати їх. Цим можна скористатися для перевірки скрипту оболонок на синтаксичні помилки. Буде проігноровано у режимі інтерактивної оболонки.
option-name може бути одним з наступних:
Те саме, що -a.
Те саме, що і -B.
Скористатися інтерфейсом редагування рядка команди у стилі emacs. Такий режим буде типово увімкнено для інтерактивної оболонки, якщо оболонку не було запущено із параметром --noediting. Це також стосується режиму редагування, який буде використано для read -e.
Те саме, що і -e.
Те саме, що і -E.
Те саме, що і -T.
Те саме, що і -h.
Те саме, що і -H.
Увімкнути журнал команд, як описано above у розділі ЖУРНАЛ. Цей параметр типово увімкнено в інтерактивних оболонках.
Результат буде таким, наче використано команду оболонки “IGNOREEOF=10” виконано (див. Shell Variables above).
Те саме, що і -k.
Те саме, що і -m.
Те саме, що і -C.
Те саме, що і -n.
Те саме, що і -f.
Наразі ігнорується.
Те саме, що і -b.
Те саме, що і -u.
Те саме, що і -t.
Те саме, що і -P.
Якщо встановлено, значення, що повертає конвеєр, є значенням останньої (крайньої правої) команди для виходу з ненульовим статусом або нулем, якщо всі команди в конвеєрі завершились успішно. Цей параметр вимкнено за замовчуванням.
Увімкнути режим posix; змінити поведінку bash там, де типові дії відрізняються від стандарту POSIX так, щоб відповідати стандарту POSIX ТАКОЖ ПЕРЕГЛЯНЬТЕ below , де наведено посилання на документ із подробицями щодо того, як режим posix впливає на поведінку bash.
Те саме, що і -p.
Те саме, що і -v.
Скористатися інтерфейсом редактора командного рядка у стилі vi. Також стосується інтерфейсу редагування, який використовується для read -e.
Те саме, що і -x.

Якщо -o вказано без назва_параметра, set виводить значення поточних параметрів оболонки. Якщо вказано +o без назва_параметра, до стандартного виведення set буде виведено послідовність команд set для відтворення поточних значень параметрів.

Увімкнути привілейований режим. У цьому режимі оболонка не читає $ENV і $BASH_ENV, функції оболонки не успадковуватимуть середовище, а змінні SHELLOPTS, BASHOPTS, CDPATH і GLOBIGNORE, якщо вони є у середовищі, буде проігноровано. Якщо оболонку буде запущено від ідентифікатора ефективного користувача (групи), який не збігається із ідентифікатор справжнього користувача (групи) і не вказано параметр -p, ідентифікатор користувача буде змінено на ідентифікатор справжнього користувача, і ці дії буде виконано для ідентифікатора справжнього користувача. Якщо під час запуску вказано параметр -p, скидання ідентифікатор ефективного користувача не відбуватиметься. Вимикання цього параметра призведе до того, що ідентифікатори ефективного користувача і групи буде встановлено за значеннями ідентифікаторів справжнього користувача і групи.
Увімкнути обмежений режим оболонки. Встановлення цього параметра не можна скасувати після того, як його було встановлено.
Вийти після прочитання й виконання однієї команди.
Вважати наявність змінних і параметрів, окрім особливих параметрів “@” і “*”, або змінних-масивів із підписами “@” або “*”, помилкою при виконанні розгортання параметрів. Якщо буде зроблено спробу розгорнути змінну або параметр без встановленого значення, оболонка виведе повідомлення про помилку і, якщо вона працює не в інтерактивному режимі, завершить роботу із ненульовим станом виходу.
Друкувати входові рядки оболонки під час виконання.
Після розгортання усіх простих команд, команди for, команди case, команди select та арифметичної команди for вивести розгорнуте значення PS4, потім команду і її розгорнуті аргументи або пов'язаний список слів до стандартного призначення помилок.
Оболонка виконує розкриття фігурних дужок (див. Brace Expansion above). Типово увімкнено.
Якщо встановлено, bash не перезаписуватиме наявний файл, якщо використано оператори переспрямовування >, >& та <>. За допомогою оператора переспрямовування >| замість > можна перевизначити цю поведінку і створити файл виведення у примусовому режимі.
Якщо встановлено, будь-які пастки на ERR буде успадковано функціями оболонки, заміною команд та командами, які виконують у середовищі підоболонок. У таких випадках, за звичних умов, пастка ERR не успадковується.
Увімкнути підставлення за журналом у стилі !. Цей параметр буде типово використано, якщо оболонка є інтерактивною.
Якщо встановлено, оболонка не розв’язує символьних посилань під час виконання таких команд, як cd, які змінюють поточний робочий каталог. Натомість вона використовує фізичну структуру каталогів. Типово, bash, під час виконання команд, які змінюють поточний каталог, дотримується логічного ланцюжка каталогів.
Якщо встановлено, будь-які пастки на DEBUG і RETURN буде успадковано функціями оболонки, заміною команд та командами, які виконують у середовищі підоболонок. У таких випадках, за звичних умов, пастки DEBUG і RETURN не успадковуються.
--
Якщо за цим параметром не вказано аргументів, значення позиційних параметрів буде скасовано. Якщо аргументи вказано, позиційним параметрам буде надано значення за аргументами, навіть якщо деякі з них починатимуться з -.
-
Сигналізує про закінчення параметрів і призначає решту аргументів позиційним параметрам. Параметри -x і -v вимикаються. Якщо аргументів немає, позиційні параметри не змінюються.

Типово параметри вимкнено, якщо не вказано інше. Використання + замість - призводить до вимкнення цих параметрів. Параметри також можна вказати як аргументи для виклику оболонки. Поточний набір параметрів можна знайти в $-. Стан повернення завжди нульовий, якщо не зустрічається недійсний параметр.

Позиційні параметри з n+1 ... перейменовуються на $1 .... Параметри, представлені числами від $# вниз до $#-n+1 втрачають значення. n має бути невід’ємним числом, меншим або рівним $#. Якщо n дорівнює 0, параметрине змінюються. Якщо n не задано, воно вважається рівним 1. Якщо n більше від $#, позиційні параметри не змінюються. Якщо n більше від $# або менше від нуля, повертається стан більший від нуля; в іншому випадку - 0.
Перемикає значення параметрів, які керують необов’язковою поведінкою оболонки. Налаштування можуть бути перерахованими нижче, або, якщо використовується параметр -o, доступні з параметром -o вбудованої команди set.
Без параметрів або з параметром -p, виводиться список усіх параметрів, які можна налаштувати, із зазначенням того, чи встановлено кожен із них; якщо задано будь-які назви параметрів, вивід обмежується цими параметрами. Параметр -p призводить до виведення у формі, яку можна повторно використати як вхідні дані.
Інші параметри мають таке значення:
Увімкнути (встановити) кожен optname.
Вимкнути (скинути) кожен optname.
Пригнічує звичайне виведення (тихий режим); стан повернення вказує, встановлено чи ні optname. Якщо для optname передано багато аргументів із -q, якщо всі optnames, увімкнено, повертається стан нуль; в іншому випадку - відмінний від нуля.
Обмежує значення назви_параметра тими назвами, які було визначено для параметра -o вбудованої команди set.

Якщо -s або -u використано без аргументів optname, shopt показує лише ті параметри, які встановлено або вимкнено відповідно. Якщо не зазначено інше, то параметри shopt типово вимкнено (не встановлено).

Стан повернення при переліку параметрів дорівнює нулю, якщо всі optnames увімкнено, в іншому випадку - відмінний від нуля. Під час встановлення або скасування параметрів статус повернення дорівнює нулю, крім випадку, коли optname не є дійсним параметром оболонки.

Список параметрів shopt:

Якщо встановлено, оболонка пригнічує багаторазове обчислення індексів асоціативного індексованого масиву протягом обчислення значення арифметичного виразу, під час виконання вбудованих програм, які можуть виконувати присвоювання змінних, і під час виконання вбудованих модулів, які виконують розіменування масивів.
Застаріла; синонім array_expand_once.
Якщо встановлено, назва команди, яка є назвою каталогу, виконується так, ніби вона є аргументом для команди cd. Цей параметр використовують лише інтерактивні оболонки.
Якщо встановлено, назви файлів, додані до змінної-масиву BASH_SOURCE, перетворюються на повні шляхи (див. Змінні оболонки вище).
Якщо встановлено, аргумент вбудованої команди cd, який не є каталогом, вважається назвою змінної, значенням якої є каталог, до якого слід перейти.
Якщо встановлено, команда cd спробує виправити незначні помилки в написанні компонента каталогу в команді cd буде виправлено. До незначних помилок належать переставлені символи, пропущені символи та зайві символи. Якщо cd виправлятиме назу каталогу, програма виведе правильну назву файла і продовжить виконання команди. Цей параметр використовується лише інтерактивними оболонками.
Якщо встановлено, bash перевіряє, чи існує команда, знайдена в геш-таблиці, перш ніж спробувати її виконати. Якщо гешована команда більше не існує, bash виконує звичайний пошук шляху.
Якщо встановлено, bash, перед виходом з інтерактивної оболонки, перелічує стани будь-яких зупинених і виконуваних завдань. Якщо виконуються якісь завдання, bash відкладе вихід до наступної спроби виходу без відповідної команди (див. вище КЕРУВАННЯ ЗАВДАННЯМИ above). Оболонка завжди відкладає вихід, якщо якісь завдання зупинено.
Якщо встановлено, bash після кожної зовнішньої (не вбудованої) команди перевіряє розмір вікна та, якщо необхідно, оновлює значення LINES і COLUMNS з використанням дескриптора файла, який пов'язано із стандартною помилкою, якщо це термінал. Типово цей параметр увімкнено.
Якщо встановлено, bash намагається зберегти всі рядки багаторядкової команди в одному записі журналу. Це дозволяє легко повторно редагувати багаторядкові команди. Цей параметр типово увімкнено, але діє він лише в тому випадку, якщо ввімкнено історію команд, як описано above у розділі ЖУРНАЛ.
Ці аспекти контролю режиму сумісності оболонки (див. SHELL COMPATIBILITY MODE below).
Якщо встановлено, bash під час завершення бере в лапки всі метасимволи оболонки в назвах файлів і каталогів. Якщо не встановлено, bash видаляє метасимволи, такі як знак долара, з набору символів, які братимуться в лапки в заповнених назвах файлів, коли ці метасимволи з’являться в посиланнях на змінні оболонки в словах, які потрібно заповнити. Це означає, що знаки долара в назвах змінних, які розгортаються до каталогів, не будуть у лапках; однак будь-які знаки долара, що з'являються в назвах файлів, також не будуть у лапках. Це активне лише тоді, коли bash використовує зворотні похилі риски для обмеження повних назв файлів. Цю змінну типово встановлено, що є типовою поведінкою bash у версіях до 4.2.
Якщо встановлено, bash, під час доповнення назв файлів, замінює назви каталогів результатами розширення слів. Це змінює вміст буфера редагування readline. Якщо ні, bash намагається зберегти те, що ввів користувач.
Якщо встановлено, bash намагається виправити помилки в назвах каталогів під час доповнення слів, якщо каталогу зі введеною назвою не існує.
Якщо встановлено, bash включає в результати розгортання шляхів назви файлів, які починаються з “.” in the results of pathname expansion. The filenames . and .. must always be matched explicitly, even if dotglob is set.
Якщо встановлено, неінтерактивна оболонка не закриється, якщо вона не зможе виконати файл, зазначений як аргумент для вбудованої команди exec. Інтерактивна оболонка не закриється в разі невдачі exec.
Якщо встановлено, альтернативи буде розгорнуто так, як це описано above у розділі АЛЬТЕРНАТИВИ. Типово цей параметр увімкнено для інтерактивних оболонок.
Якщо встановлено на моменти виклику оболонки або у файлі запуску оболонки, налаштувати виконання профілю діагностики до запуску оболонки так само, як у параметрі --debugger. Якщо встановлено після виклику оболонки, буде увімкнено таку поведінку для використання засобів діагностики:
1.
Параметр -F вбудованої команди declare призводить до виведення назви файла початкового коду та номера рядка для усіх функцій, назви яких передано як аргумент.
2.
Якщо команда яку запущено пасткою DEBUG повертає ненульове значення, наступну команду буде пропущено і не виконано.
3.
Якщо команда, яку віддано пасткою DEBUG, повертає значення 2, і оболонка виконується у підпрограмі (функції оболонки або скрипті оболонки, які запущено вбудованими командами . і source), оболонка імітує виклик return.
4.
BASH_ARGC і BASH_ARGV буде оновлено так, як це описано у їхніх описах above).
5.
Буде увімкнено трасування функцій: заміна команд, функції оболонки та підоболонки, які викликає за допомогою ( команда ) успадкують пастки DEBUG і RETURN.
6.
Буде увімкнено трасування помилок: заміна команд, функції оболонки та підоболонки, які викликає за допомогою ( команда ) успадкують пастку ERR.
Якщо встановлено, будуть увімкнені функції розширеного зіставлення шаблонів, описані above у розділі Розгортання шляхів.
Якщо встановлено, рядки беруться в лапки $'рядок' and $"рядок" у межах розширень ${параметрів}, узятих у подвійні лапки. Цей параметр типово увімкнено.
Якщо встановлено, шаблони, які не відповідають назвам файлів під час розгортання шляху, призводять до помилки розгортання.
Якщо встановлено, суфікси, визначені змінною оболонки FIGNORE, призводять до нехтування слів під час доповнювання слів, навіть якщо нехтувані слова є єдиними можливими доповненнями. Див. підзаголовок Змінні оболонки above , де наведено опис FIGNORE. Цей параметр типово увімкнено.
Якщо встановлено, вирази діапазону, які використовуються у виразах відповідності шаблону з дужками (див. Відповідність за взірцем above) під час порівнянь поводяться як у традиційній мові C. Тобто при встановленні відповідності послідовність зіставлення поточного мовного стандарту не буде враховано, тому b не буде зіставлятися між A і B, а символи ASCII верхнього та нижнього регістру будуть порівнюватися разом.
If set, pathname expansion will never match the filenames . and .., even if the pattern begins with a “.”. Цей параметр типово увімкнено.
Якщо встановлено, шаблон **, який використовується в контексті розгортання шляху, відповідає всім файлам і нулю або більше каталогів і підкаталогів. Якщо за шаблоном йде /, до уваги беруться лише каталоги та підкаталоги.
Якщо встановлено, повідомлення про помилки оболонки записуються у стандартному форматі повідомлень про помилки GNU.
Якщо встановлено, то список журналу, коли оболонка завершує роботу, додається до файлу, названого значенням змінної HISTFILE, а не перезаписує його.
Якщо встановлено, і використовується readline, користувачу надається можливість повторно відредагувати невдалe підстановку журналу.
Якщо встановлено, і використовується readline, результати підставлення журналу не відразу передаються до обробника оболонки. Замість цього отриманий рядок завантажується в буфер редагування readline, що дозволяє вносити подальші зміни.
Якщо встановлено, і використовується readline, bash спробує доповнити назву вузла, коли доповнюється слово, що містить @ (див. Доповнення у розділі READLINE above). Типово увімкнено.
Якщо встановлено, то при завершенні роботи інтерактивної оболонки для входу bash надсилатиме всім завданням SIGHUP.
Якщо встановлено, заміна команд успадкує значення параметра errexit, замість скасування встановлення для нього значення у середовищі підоболонки. Цей параметр буде увімкнено, якщо увімкнено режим posix.
В інтерактивній оболонці слово, що починається на #, та решту символів у цьому рядку буде знехтувано, як і в неінтерактивній оболонці (див. КОМЕНТАРІ above). Цей параметр типово увімкнено.
Якщо встановлено і керування завданнями неактивне, оболонка запускає останню команду конвеєра, який не виконується у фоновому режимі в поточному середовищі оболонки.
Якщо встановлено, а параметр cmdhist увімкнено, багаторядкові команди зберігаються в журналу з вбудованими новими рядками, а не з розділенням крапки з комою, де це можливо.
Якщо встановлено, локальні змінні успадковують значення та атрибути однойменної змінної, яка існує в попередній області дії до того, як буде присвоєно нове значення. Атрибут nameref не успадковується.
Якщо встановлено, виклик unset для локальних змінних у попередніх областях видимості функції позначає їх, тому наступні пошуки знайдуть їх не встановленими до виходу з цієї функції. Це ідентично скасуванню встановлення локальних змінних у поточній області видимості функції.
Оболонка встановлює цей параметр, якщо вона запущена як оболонка для входу (див. ВИКЛИК above). Значення не можна змінювати.
Якщо встановлено, і файл, який bash перевіряє на наявність пошти, був доступним від моменту останньої перевірки, bash виведе повідомлення “The mail in mailfile has been read”.
Якщо встановлено, і використовується readline, bash не намагатиметься шукати можливе доповнення в PATH, якщо спроба доповнення буде здійснюватися в порожньому рядку.
Якщо встановлено, bash встановлюватиме відповідність назв файлів із врахуванням регістру при розгортанні шляхів (див. Розгортання шляхів above).
Якщо встановлено, bash встановлюватиме відповідність взірців без врахування регістру символів при виконанні команд-умов case та [[, при виконанні розгортання слів із заміною за взірцем або при фільтрування можливих доповнень при програмованому доповненні.
Якщо встановлено, bash братиме трансльований результат нейтралізації $"..." у одинарні лапки замість подвійних. Якщо рядок не буде трансльовано, цей параметр ні на що не впливатиме.
Якщо встановлено, розгортання взірців шляху, які не відповідають жодному файлу (див. Розгортання шляхів above) не буде розгорнуто і буде вилучено, замість того, щоб розгортатися у себе.
Якщо встановлено, bash не розгортатиме & у рядку-заміннику при підставлянні за взірцем до тексту, який відповідає взірцю, як це описано у розділі Розгортання параметрів above. Цей параметр типово увімкнено.
Якщо встановлено, буде увімкнено можливості програмованого доповнення (див. Програмоване доповнення above). Цей параметр типово увімкнено.
Якщо встановлено, буде увімкнено програмоване доповнення, bash оброблятиме назву команди, яка не має жодних варіантів доповнення, як можливу альтернативу і виконуватиме розгортання альтернатив. Якщо у команди є альтернатива, bash спробує виконати програмоване доповнення з використанням слова команди, яке є результатом розгортання альтернативи.
Якщо встановлено, рядки запиту підлягатимуть розгортанню параметрів, заміні команд, арифметичним обчисленням та вилученню нейтралізації після розгортання, яке описано у розділі ЗАПИТИ above. Цей параметр типово увімкнено.
Оболонка встановлює цей параметр, якщо її запущено у обмеженому режимі (див. ОБМЕЖЕНА ОБОЛОНКА below). Значення параметра змінювати не можна. Значення параметра не буде повторно встановлено під час виконання файлів запуску, що уможливлює визначення у файлах запуску того, чи запущено оболонку в обмеженому режимі.
Якщо встановлено, вбудована команда shift виводитиме повідомлення про помилку, якщо лічильник зсуву перевищуватиме за значенням кількість позиційних параметрів.
Якщо встановлено, вбудована команда . (source) використовуватиме значення змінної PATH для пошуку каталогу, який містить файл, переданий як аргумент, якщо не вказано параметр -p. Типово, цей параметр увімкнено.
Якщо встановлено, оболонка автоматично закриватиме дескриптори файлів, значення яких визначено за допомогою синтаксису переспрямування {назва-змінної} (див. ПЕРЕСПРЯМУВАННЯ above) замість полишення їх відкритими при завершенні роботи команди.
Якщо встановлено, вбудована команда echo типово розгортатиме послідовності символів із екрануванням символом зворотної похилої риски. Якщо також використано параметр оболонки posix, echo не оброблятиме жодних параметрів.
Призупинити виконання цієї оболонки, аж доки вона не отримає сигналу SIGCONT. Роботу оболонки входу до системи або оболонки без увімкненого керування завданнями не можна призупиняти; для перевизначення цієї поведінки і примусового призупинення роботи скористайтеся параметром -f. Буде повернуто стан 0, якщо оболонка не є оболонкою входу до системи або не увімкнено керування завданнями і не вказано параметр -f.
[ вираз ]
Повернути стан 0 (істина) або 1 (хибність), залежно від обчисленого значення виразу умови вираз. Кожен оператор і операнд має бути окремим аргументом. Вирази складаються з основних елементів, які описано above у розділі УМОВНІ ВИРАЗИ. test не приймає ніяких параметрів, а також не приймає і ігнорує аргумент -- як позначку завершення параметрів.
Вирази можна поєднувати за допомогою зазначених нижче операторів. Оператори у списку вказано за пріоритетністю. Обчислення залежить від кількості аргументів. Див. нижче. Якщо аргументів п'ять або більше, test використає пріоритетність операторів.
! вираз
Істина, якщо вираз є хибним.
( вираз )
Повертає значення виразу вираз. Цим можна скористатися для перевизначення звичайної пріоритетності операторів.
вираз -a вираз2
Істина, якщо обидва, вираз1 і вираз2, мають значення true.
вираз1 -o вираз2
Істина, якщо вираз1 або вираз2 має значення true.

test і [ обчислюють умовні виразу з використанням набору правил на основі кількості аргументів.

0 аргументів
Вираз є хибним.
1 аргумент
Вираз є істинним тоді і лише тоді, коли аргумент не є порожнім.
2 аргументи
Якщо першим аргументом є !, вираз є істинним тоді і лише тоді, коли другий аргумент є порожнім. Якщо перший аргумент є одним із унарних умовних операторів зі списку у розділі УМОВНІ ВИРАЗИ above , вираз є істинним, якщо обчислення унарного оператора дає значення «істина». Якщо першим аргументом не є коректний унарний умовний оператор, вираз буде хибним.
3 аргументи
Вказані нижче умови буде застосовано за порядком, який визначає для них список. Якщо другим аргументом буде один із двійкових операторів умов, список яких наведено у розділі УМОВНІ ВИРАЗИ above , результатом обчислення виразу буде результат двійкової перевірки, операндами якої будуть перший і третій аргументи. Оператори -a і -o вважаються двійковими операторами, якщо у них три аргументи. Якщо першим аргументом є !, значенням буде заперечення двоаргументної перевірки, у якій використано другий і третій аргументи. Якщо першим аргументом є (, а третім — ), результатом буде результат одноаргументної перевірки другого аргументу. В усіх інших випадках результатом обчислення виразу буде «хибність».
4 аргументи
До порядку, у якому буде побудовано список, застосовують вказані нижче умовні оператори. Якщо першим аргументом є !, результат буде запереченням виразу, що складається з решти трьох аргументів. Якщо першим аргументом є (, а четвертим — ), результатом буде двоаргументна перевірка за другим і третім аргументами. В інших випадках буде виконано обробку і обчислення виразу відповідно до пріоритетності, яку використано у правилах з наведеного вище списку.
5 або більше аргументів
Вираз буде оброблено і обчислено відповідно до пріоритетності з використанням наведених вище правил.

Коли оболонка працює у режимі POSIX, або якщо вираз є частиною команди [[, оператори < та > упорядковують за поточною локалізацією. Якщо оболонка не перебуває в режимі POSIX, команди test і [ впорядковують записи лексикографічно, використовуючи порядок ASCII.

Історично використаний спосіб обробки пріоритетів операторів з 4 або більше аргументами може призвести до неоднозначностей, коли зустрічаються рядки, що виглядають як основи. Стандарт POSIX визнав застарілими основи -a та -o та вирази, які взято у дужки. Їх не слід використовувати у скриптах. Набагато надійніше обмежити виклики тестів однією основою та замінити використання -a та -o на оператори списку && та || оболонки.

Вивести сукупний час використання процесора завданнями користувача і системи для оболонки і процесів, які було запущено оболонкою. Станом повернення є 0.
Дія – це команда, яка зчитується та виконується, коли оболонка отримує будь-який із сигналів специфікація сигналу. Якщо аргументу дія не вказано (і є один сигспеч) або -, кожен вказаний специфікатор сигналу скидається до значення, яке він мав під час запуску оболонки. Якщо дія – це нульовий рядок, сигнал, вказаний кожним специфікатором сигналу, буде проігноровано оболонкою та командами, які вона викликає.
Якщо ніяких аргументів не передано, trap показує дії, пов'язані з кожним перехопленим сигналом, як набір команд trap, які можна повторно використовувати як вхідні дані оболонки для відновлення поточних позицій сигналів. Якщо надано -p, а дію не вказано, тоді trap покаже дії, пов'язані з кожним специфікатором сигналу, або, якщо жодного не надано, для всіх перехоплених сигналів, як набір команд trap, які можна повторно використовувати як вхідні дані оболонки для відновлення поточних позицій сигналів. Параметр -P поводиться аналогічно, але показує лише дії, пов'язані з кожним аргументом специфікатор сигналу. -P вимагає принаймні одного аргументу специфікатор сигналу. Параметри -P або -p можуть використовуватися у середовищі підоболонки (наприклад, підставляння команд) і, якщо вони використовуються до того, як trap використовується для зміни обробки сигналу, показуватимуть стан перехоплень його батьківського об'єкта.
Параметр -l виводить список назв сигналів та їхніх відповідних номерів. Кожен специфікатор сигналу — це або назва сигналу, визначена у <signal.h>, або номер сигналу. Для назв сигналів регістр символів не має значення, а префікс SIG є необов'язковим. Якщо -l надано без аргументів специфікатор сигналу, програма виводить список дійсних назв сигналів.
Якщо специфікацією_сигналу є EXIT (0), при виході з оболонки буде виконано команду дія. Якщо значенням специфікації_сигналу є DEBUG, команду дія буде виконано перед кожною простою командою, командою for, командою case, командою select, арифметичною командою ((, умовною командою [[, арифметичною командою for і перед першою командою, яку буде виконано у функції оболонки (див. ГРАМАТИКА ОБОЛОНКИ above). Зверніться до опису параметра extdebug вбудованої команди shopt, above) щоб дізнатися більше про його вплив на пастку DEBUG. Якщо значенням специфікація_сигналу є RETURN, команду дія буде виконано кожного разу, коли завершуватиме виконання функції оболонки або скрипту, який виконується із використанням вбудованих команд . і source.
Якщо специфікацією_сигналу є ERR, дію буде виконано кожного разу, коли конвеєр (який може складатися з однієї простої команди), список або складена команда повертає ненульовий стан виходу, відповідно до наведених нижче умов. Пастку ERR не буде виконано, якщо команда з помилкою є частиною списку команд, одразу за яким вказано зарезервоване слово while або until, частину перевірки в інструкції if, частину команди, яка виконується у списку && або ||, окрім команди за останнім && або ||, будь-якою командою у конвеєрі, окрім останньої (відповідно до стану параметра оболонки pipefail), або якщо повернене командою значення заперечено за допомогою !. Це ті самі умови, які використовують для параметра errexit (-e).
Якщо командна оболонка не є інтерактивною, сигнали, знехтувані при вході в оболонку, не можна захопити у пастку або скинути. В інтерактивних оболонках дозволено ігнорування перехоплених сигналів при введенні. Перехоплені сигнали, які не нехтуються, скидаються до початкових значень у підоболонці або середовищі підоболонки, коли вона створюється. Стан повернення false, якщо будь-який sigspec недійсний; інакше trap повертає true.
Ніяких наслідків, повертає стан 0.
Вказує на те, як буде оброблено кожну назву, якщо її використано як назву команди.
Якщо використовується параметр -t, type друкує один із рядків alias, keyword, function, builtin або file, якщо name є псевдонімом, зарезервованим словом оболонки, функцією, вбудованою програмою або виконуваним файлом відповідно. Якщо назву не знайдено, то type нічого не виводитиме і повертає ненульовий стан виходу.
Якщо буде використано параметр -p, type або повертає назву виконуваного файла, який буде знайдено пошуком у $PATH назви, або нічого, якщо “type -t name” не повертає файл. Параметр -P змушує шукати PATH для кожної назви, навіть якщо “type -t name” не повертає файл. Якщо у таблиці хешованих команд є назва, -p і -P виведуть хешоване значення, яке не обов'язково є файлом, що з'являється першим у PATH.
Якщо використано параметр -a, type виводить усі місця, що містять команду з назвою назва. Це, зокрема, включає псевдоніми, зарезервовані слова, функції та вбудовані модулі, але можна надати параметри пошуку шляху (-p та -P), щоб обмежити виведення виконуваними файлами. type не звертається до таблиці хешованих команд під час використання -a з -p та виконує лише пошук PATH для назви.
Параметр -f придушує пошук функцій оболонки, як і вбудована command. type повертає true, якщо знайдено всі аргументи, false, якщо жодного не знайдено.
Забезпечує керування ресурсами, доступними для оболонки, і процесами, які вона запустила, в системах, які дозволяють таке керування.
Параметри -H і -S визначають, що для даного ресурсу встановлено жорстку або м’яку межу. Після встановлення жорсткої межі, її не може збільшити користувач без права root; м'яку межу можна збільшити до значення жорсткої межі. Якщо не вказано ні -H, ні -S, встановлюються як м’яка, так і жорстка межі.
Значенням межа може бути число в одиницях, зазначене для ресурсу, або одне зі спеціальних значень hard, soft або unlimited, які означають поточну жорстку межу, поточну м’яку межу та безліміт відповідно. Якщо значення межа опущено, ulimit виведен поточне значення м’якої межі для ресурсу, якщо не вказано параметр -H. Якщо вказано більше одного ресурсу, перед значенням, якщо доречно, друкуються назва межі й одиниця вимірювання. Інші варіанти інтерпретуються так:
Вивести звіт щодо усіх поточних обмежень; без встановлення будь-яких обмежень.
Максимальний розмір буфера сокета.
Максимальний розмір створених файлів ядра.
Максимальний розмір сегмента даних процесу.
Максимальна пріоритетність планування ( “nice”).
Максимальний розмір файлів, які записано оболонкою та її дочірніми процесами.
Максимальна кількість сигналів у черзі.
Максимальна кількість k-черг, які можна розмістити у пам'яті.
Максимальний розмір, який може бути заблоковано у пам'яті.
Максимальний розмір резидентного набору (у багатьох системах це обмеження не береться до уваги).
Максимальна кількість відкритих дескрипторів файлів (більшість систем не дозволяють встановлення цього значення).
Розмір каналу у 512-байтових блоках (може бути не встановлено).
Максимальна кількість байтів у чергах повідомлень POSIX
Максимальна пріоритетність планування у режимі реального часу.
Максимальний розмір стека.
Максимальний обсяг часу процесора у секундах.
Максимальна кількість процесів, які доступні для одного користувача.
Максимальний об'єм віртуальної пам'яті, яка доступна для оболонки, і, у деяких системах, для її дочірніх процесів.
Максимальна кількість блокувань файлів.
Максимальна кількість псевдотерміналів.
Максимальний час, протягом якого процес реального часу може виконуватися без блокування, у мікросекундах.
Максимальна кількість потоків обробки.

Якщо вказано обмеження і не використано параметр -a, обмеження стане новим значенням вказаного ресурсу. Якщо не вказано жодного параметра, буде використано параметр -f.

Кроком зростання значень є 1024 байтів, окрім варіанта з -t, для якого кроком є секунди; -R, для якого кроком є мікросекунди; -p, для якого одиницями є блоки у 512 байтів; -P, -T, -b, -k, -n і -u, для яких значення є безрозмірними; та у режиму posix -c і -f, для яких кроком зростання є 512 байтів. Повернутим станом є 0, якщо немає некоректних параметрів або аргументів і встановлення нового обмеження виконано без помилок.

Встановити для маски створення файлів користувачем значення режим. Якщо режим починається з цифри, він вважатиметься записом у вісімковій системі числення; в усіх інших випадках, він вважатиметься записом символічної маски режиму, подібним до того, який приймає команда chmod(1). Якщо режим не вказано, umask буде виведено поточне значення маски. Використання параметра -S без аргументу режим призведе до виведення маски у символічній формі. Типовим режимом виведення є режим вісімкових чисел. Якщо вказано параметр -p і не вказано режим, дані буде виведено у форматі, яким можна скористатися як вхідними даними. Станом повернення буде нуль, якщо режим було змінено успішно або якщо не було вказано аргументу режим. В усіх інших випадках буде повернуто ненульовий стан виходу.
Вилучити усі назви назва зі списку визначених альтернатив. Якщо вказано -a, буде вилучено усі визначення альтернатив. Повернутим значенням буде «істина», якщо вказана назва є визначеною альтернативою.
Для кожної назви вилучити відповідну змінну або функцію. Якщо вказано параметр -v, кожна назва є посиланням на змінну оболонки, і цю змінну буде вилучено. Якщо вказано параметр -f, усі назви є посиланнями на функцію оболонки, ці визначення функцій буде вилучено. Якщо вказано параметр -n і назва є змінною із атрибутом nameref, буде скасовано встановлення значення назви, а не змінної, на яку вона посилається. -n не спрацює, якщо вказано параметр -f. Значення призначених лише для читання змінних у такий спосіб скидати не можна. При вилученні змінних або функцій, їх також буде вилучено з середовища, що передається наступним командам. Якщо не вказано жодних параметрів, усі назви посилаються на змінні. Якщо не буде виявлено змінної із відповідною назвою, наступним командам буде скасовано встановлення значення для функції із відповідною назвою, якщо така існує. Встановлення значень для деяких змінних оболонки не можна скасувати. Якщо скасовано встановлення значення для змінних BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME, GROUPS, HISTCMD, LINENO, RANDOM, SECONDS або SRANDOM, вони втратять свої особливі властивості, навіть якщо згодом значення буде знову встановлено. Станом виходу буде «істина», якщо не буде виявлено призначені лише для читання або непридатні до скасування встановлення значення назв.
Очікувати кожен зазначений дочірній процес ідентифікатор і повернути стан завершення останнього ідентифікатора. Кожен ідентифікатор може бути ідентифікатором процесу або специфікацією завдання; якщо вказано специфікацію завдання, wait очікує на всі процеси у завданні.
Якщо не вказано жодних параметрів або ідентифікаторів, wait очікує на всі запущені фонові завдання та підставляння останнього виконаного процесу, якщо його ідентифікатор процесу такий самий, як $!, а повернутий стан дорівнює нулю.
Якщо вказано параметр -n, wait очікує завершення будь-якого з наданих ідентифікаторів або, якщо ідентифікатор не вказано, будь-якого підставляння завдання чи процесу та повертає стан виходу. Якщо жоден з наданих ідентифікаторів не є дочірнім елементом оболонки, або якщо ідентифікатор не вказано, а оболонка не має неочікуваних дочірніх елементів, стан виходу дорівнює 127.
Якщо вказано параметр -p, wait призначає ідентифікатор процесу або завдання, для якого повертається стан завершення, змінній назва_змінної, іменованій аргументом параметра. Змінна, яка не може бути доступна лише для читання, буде спочатку скинута перед будь-яким наданням значення. Це корисно лише при використанні з пареметром -n.
Якщо за допомогою параметра -f увімкнено керування завданнями, wait змушує чекати завершення кожного ідентифікатора перед поверненням його стану, замість повернення стану після зміни стану.
Якщо жоден з ідентифікаторів не вказує на один з активних дочірніх процесів оболонки, станом повернення буде 127. Якщо wait переривається сигналом, будь-яка назва змінної залишиться невстановленим, а стан повернення буде більшим за 128, як описано в розділі SIGNALS. above. В інших випадках повернутий стан є станом виходу останнього ідентифікатора.

РЕЖИМ СУМІСНОСТІ ОБОЛОНКИ

У bash-4.0 було впроваджено поняття рівень сумісності оболонки, яке визначається як набір параметрів вбудованої команди shopt: compat31, compat32, compat40, compat41 тощо. У поточній версії передбачено визначення лише одного рівня сумісності — усі варіанти є взаємно виключними. Рівень сумісності призначено для того, щоб уможливити для користувачів вибір поведінки попередніх версій, які є несумісними із новими версіями на час перенесення скриптів на використання поточних можливостей і поточної поведінки оболонки. Таке рішення ми вважаємо тимчасовим.

У цій версії немає описів поведінки, яка є стандартною для певної версії (наприклад, встановлення compat32 означає, що нейтралізація правого боку оператора відповідності за формальним виразом призводить до нейтралізації спеціальних символів формального виразу у слові, тобто типової поведінки для bash-3.2 та новіших версій).

Якщо користувач увімкне, скажімо, compat32, це може вплинути на поведінку інших рівнів сумісності, аж до, включно, поточного рівня сумісності. Ідея полягає у тому, що кожен рівень сумісності керує поведінкою, яку було змінено у відповідній версії bash, але вона могла бути характерною для попередніх версій. Наприклад, зміну щодо використання порівнянь із врахуванням локалі у команді [[ було впроваджено у bash-4.1, а у попередніх версіях було використано порівняння на основі ASCII, тому вмикання compat32 призведе також до вмикання порівнянь на основі ASCII. Так модульність може бути недостатньою для усіх випадків використання, тому користувачам слід бути доволі обережними із застосуванням рівнів сумісності. Ознайомтеся із документацією, що визначити поточну поведінку оболонки для потрібної вам можливості.

У bash-4.3 впроваджено нову змінну оболонки: BASH_COMPAT. Значення, яке надано цій змінній (десятковий дріб номера версії, зокрема 4.2, або ціле число, яке відповідає параметру compatNN, зокрема 42), визначає рівень сумісності.

Починаючи з bash-4.4, у bash розпочато вилучення параметрів застарілих рівнів сумісності. Нарешті, параметри буде вилучено і заміщено BASH_COMPAT.

Bash-5.0 є останньою версією, для якої передбачено окремий параметр shopt для попередньої версії. BASH_COMPAT — це єдиний механізм для контролю рівня сумісності у версіях, новіших за bash-5.0.

У наведеній нижче таблиці описується зміна поведінки, керована кожним значенням рівня сумісності. Тег compat NN використовується як скорочення для встановлення рівня сумісності до NN, використовуючи один з наведених механізмів. Для версій до bash-5.0 рівень сумісності можна встановити за допомогою відповідного параметра shopt compatNN. Для bash-4.3 та пізніших версій краще використовувати змінну BASH_COMPAT, і це потрібно робити для bash-5.1 та пізніших версій.

Взяття у лапки правої частини рівності оператора встановлення відповідності за формальним виразом у команді [[ (=~) не має особливого ефекту.
Оператори < та > команди [[ не враховують поточну локаль під час порівняння рядків; вони використовують порядок ASCII.
Оператори < і > команди [[ не враховують поточну локаль при порівнянні рядків; буде використано упорядковування за ASCII. У версіях Bash до bash-4.1 використано упорядковування за ASCII і strcmp(3); у bash-4.1 і пізніших версіях використано послідовність упорядковування поточної локалі та strcoll(3).
  • У режимі posix після time можуть бути параметри, але команду все одно буде розпізнано як зарезервоване слово (це інтерпретація POSIX 267).
  • У режимі posix обробник потребує, щоб у частині слово розгортання параметра у подвійних лапках була парна кількість одинарних лапок, і обробляє їх по-особливому: символи в одинарних лапках вважаються нейтралізованими (це інтерпретація POSIX 221).
  • Рядок-замінник при заміні із взірцем у подвійних лапках не підлягає вилученню лапок, як у версіях після bash-4.2.
  • у режимі posix одинарні лапки вважаються особливим символом при розгортанні частини слово у розгортанні параметрів у подвійних лапках: ними можна скористатися для екранування правої фігурної дужки або іншого спеціального символу (це частина інтерпретації POSIX 221); у пізніших версіях одинарні лапки не вважаються особливим символом у розгортання у подвійних лапках
  • Помилки розгортання слів вважаються нефатальними помилками, які призводять до збою поточної команди, навіть у режимі posix (типова поведінка полягає в тому, щоб зробити їх фатальними помилками, які призводять до виходу оболонки).
  • Під час виконання функції оболонки стан циклу (while/until/тощо) не скидається, тому break або continue в цій функції переривають або продовжують цикли в контексті виклику. Bash-4.4 і новіші скидають стан циклу, щоб запобігти цьому.
  • Оболонка встановлює значення, використовувані BASH_ARGV і BASH_ARGC, щоб вони могли розширюватися до позиційних параметрів оболонки, навіть якщо режим розширеного налагодження не ввімкнено.
  • Підоболонка успадковує цикли від батьківського контексту, тому break або continue призведе до виходу з підоболонки. Bash-5.0 і новіші скидають стан циклу, щоб запобігти виходу
  • Присвоєння змінним, що передують вбудованим командам, таким як export і readonly, які встановлюють атрибути, продовжують впливати на змінні з такими ж назвами в середовищі, що викликає, навіть якщо оболонка не перебуває в режимі posix.
  • У bash-5.1 змінено спосіб генерування $RANDOM, щоб трохи підвищити випадковість. Якщо рівень сумісності оболонки встановлено на 50 або нижче, вона повертається до методу з bash-5.0 та попередніх версій, тому ініціалізація генератора випадкових чисел присвоєнням значення RANDOM призведе до тієї ж послідовності, що й у bash-5,0.
  • Якщо геш-таблиця команд порожня, версії bash до bash-5.1 виводили повідомлення про це, навіть коли створювали вихідні дані, які можна повторно використати як вхідні дані. Bash-5.1 пригнічує це повідомлення, коли надано параметр -l.
  • Вбудована команда unset обробляє спроби скасувати підписи масиву @ і * по-різному, залежно від того, є масив індексованим чи асоціативним, та інакше від попередніх версій.
  • Арифметичні команди ( ((...)) ) та вирази в арифметичному операторі for можна розгортати декілька разів.
  • Вирази, що використовуються як аргументи арифметичних операторів у команді умови [[, можна розгортати декілька разів.
  • Вирази у параметрі підрядка розгортання дужок може бути розгорнуто декілька разів.
  • Вирази в розгортанні слів $((...)) можна розгортати декілька разів.
  • Арифметичні вирази, що використовуються як підписи індексованих масивів, можна розгортати більше одного разу.
  • test -v, якщо команді передано аргумент A[@], де A — це наявний асоціативний масив, поверне true, якщо масив містить будь-які встановлені елементи. Bash-5.2 шукатиме та повідомлятиме про ключ з назвою @.
  • Розгортання слів ${параметр[:]=значення} поверне значення до виконання будь-яких перетворень, специфічних для змінної (наприклад, перетворення у нижній регістр). Bash-5.2 поверне кінцеве значення, призначене змінній.
  • Обробка підставляння команд працюватиме так, ніби ввімкнено розширене використання замінників (див. опис вбудованої функції shopt вище), тому розбір підставляння команди, що містить шаблон extglob (скажімо, як частину функції оболонки), не призведе до помилки. Це передбачає, що метою є увімкнення extglob перед виконанням команди та виконанням розгортання слів. Це призведе до помилки під час розгортання слів, якщо extglob не було увімкнено на момент виконання команди.
  • Вбудований метод test використовує свій історичний алгоритм для розбору підвиразів у дужках, коли їм передано п'ять або більше аргументів.
  • Якщо вбудованій функції -p передано параметр -P або -P, bind обробляє будь-які аргументи, що залишилися після обробки параметрів, як назви команд, що пов'язуються, і показує будь-які послідовності клавіш, пов'язані з цими командами, замість того, щоб обробляти аргументи як послідовності клавіш для пов'язування.

ОБМЕЖЕНА ОБОЛОНКА

Якщо bash запущено з назвою rbash, або під час виклику додано параметр -r, оболонка стає обмеженою. Обмежена оболонка використовується для налаштування середовища, більш керованого, ніж стандартна оболонка. Вона поводиться як bash, за винятком того, що не виконуються або заборонені такі дії:

  • Зміна каталогів за допомогою cd.
  • Встановлення значення або скасовування встановлення значення SHELL, PATH, HISTFILE, ENV та BASH_ENV.
  • Задання назв команд, які містять /.
  • Задання назви файла, яка містить /, як аргументу вбудованої команди ..
  • Використання параметра -p до вбудованої команди command для визначення шляху пошуку.
  • Задання назви файла, що містить символ похилої риски, як аргументу вбудованої команди history.
  • Задання назви файла, що містить символ похилої риски, як аргументу параметра -p вбудованої команди hash.
  • Імпортування визначень функцій із середовища оболонки під час запуску.
  • Обробка значень BASHOPTS і SHELLOPTS із середовища оболонки під час запуску.
  • Переспрямування виводу з використанням операторів переспрямування >, >|, <>, >&, &>, і >>.
  • Використання вбудованої команди exec для заміни оболонки іншою командою.
  • Додавання або вилучення вбудованих команд за допомогою параметрів -f і -d вбудованої команди enable.
  • Використання вбудованої команди enable для вмикання вимкненої вбудованої команди оболонки.
  • Додавання параметра -p до вбудованої команди command.
  • Вимикання обмеженого режиму за допомогою set +r або set +o restricted.

Ці обмеження буде примусово застосовано після читання усіх файлів запуску.

When a command that is found to be a shell script is executed (see COMMAND EXECUTION above), rbash вимикає усі обмеження щодо виконання скрипту у запущеній оболонці.

ДИВ. ТАКОЖ

http://pubs.opengroup.org/onlinepubs/9799919799/
http://tiswww.case.edu/~chet/bash/POSIX — — опис режиму posix
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

ФАЙЛИ

/bin/bash
Виконуваний файл bash
/etc/profile
Загальносистемний файл ініціалізації, який буду виконано для оболонок входу до системи
~/.bash_profile
Особистий файл ініціалізації, який буду виконано для оболонок входу до системи
~/.bashrc
Індивідуальний файл запуску для окремої інтерактивної оболонки
~/.bash_logout
Індивідуальний файл чищення оболонки входу до системи, який буде виконано під час завершення роботи оболонки входу до системи
~/.bash_history
Типове значення HISTFILE, файл, у якому bash зберігає журнал команд
~/.inputrc
Індивідуальний файл ініціалізації readline
/etc/inputrc
Загальносистемний файл ініціалізації readline

АВТОРИ

Brian Fox, Free Software Foundation
bfox@gnu.org

Chet Ramey, Західний резервний університет Кейса
chet.ramey@case.edu

ЗВІТУВАННЯ ПРО ВАДИ

Якщо вами буде виявлено ваду у bash, вам слід повідомити про неї. Втім, спочатку слід переконатися, що це справді вада, і що її можна відтворити у найсвіжішій версії bash. Код найсвіжішої версії завжди можна знайти на ftp://ftp.gnu.org/pub/gnu/bash/ і http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

Щойно вами буде встановлено достеменне існування вади, скористайтеся командою bashbug для надсилання звіту щодо вади. Якщо ви знаєте, як виправити ваду, будемо раді, якщо ви повідомите нам про це! Ви можете надіслати пропозиції та “philosophical” звіти щодо вад на адресу bug-bash@gnu.org або розмістити їх у групі новин Usenet gnu.bash.bug.

До УСІХ звітів щодо вад має бути включено:

Номер версії bash
Дані щодо обладнання та операційної системи
Дані щодо компілятора, використаного для збирання програми
Опис поведінки програми під час відтворення вади
Короткий скрипт або
“recipe” призводить до проявів вади

bashbug автоматично вставляє перші три записи до шаблону, який він надає для створення звіту щодо вади.

Коментарі та звіти щодо вад у цій сторінці підручника слід спрямовувати на адресу chet.ramey@case.edu.

ВАДИ

Він надто великий та надто повільний.

Між bash та традиційними версіями sh є деякі незначні відмінності, які пов'язано, здебільшого, зі специфікацією POSIX

У деяких випадках використання є проблеми із альтернативами.

Вбудовані команди та функції оболонки не підлягають зупиненню або повторному запуску.

Складені команди і списки команд у формі “a ; b ; c” не обробляються належним чином у поєднанні з призупиненням процесу. Коли процес зупинено, оболонка негайно виконує наступну команду зі списку або виходить з будь-яких наявних циклів. Достатньо взяти команду в дужки, щоб примусово перевести її в підоболонку, яку можна зупинити як єдине ціле, або запустити команду у фоновому режимі та одразу перевести її на передній план.

Змінні-масиви не можна (ще) експортувати.

ПЕРЕКЛАД

Український переклад цієї сторінки посібника виконано Andrij Mizyk <andmizyk@gmail.com>, Andriy Rysin <arysin@gmail.com>, Yuri Chornoivan <yurchor@ukr.net> і lxlalexlxl <lxlalexlxl@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3. НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.

7 квітня 2025 року GNU Bash 5.3