table of contents
- НАЗВА
- КОРОТКИЙ ОПИС
- АВТОРСЬКІ ПРАВА
- ОПИС
- ПАРАМЕТРИ
- АРГУМЕНТИ
- ВИКЛИК
- ОЗНАЧЕННЯ
- ЗАРЕЗЕРВОВАНІ СЛОВА
- ГРАМАТИКА ОБОЛОНКИ
- КОМЕНТАРІ
- НЕЙТРАЛІЗАЦІЯ
- ПАРАМЕТРИ
- РОЗГОРТАННЯ
- ПЕРЕСПРЯМОВУВАННЯ
- АЛЬТЕРНАТИВИ
- ФУНКЦІЇ
- АРИФМЕТИЧНЕ ОЦІНЮВАННЯ
- УМОВНІ ВИРАЗИ
- РОЗГОРТАННЯ ПРОСТИХ КОМАНД
- ВИКОНАННЯ КОМАНД
- СЕРЕДОВИЩЕ ВИКОНАННЯ КОМАНД
- СЕРЕДОВИЩЕ
- СТАН ВИХОДУ
- СИГНАЛИ
- КЕРУВАННЯ ЗАВДАННЯМИ
- ЗАПИТИ
- READLINE
- ЖУРНАЛ
- ДОПОВНЕННЯ ЗА ЖУРНАЛОМ
- ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ
- РЕЖИМ СУМІСНОСТІ ОБОЛОНКИ
- ОБМЕЖЕНА ОБОЛОНКА
- ДИВ. ТАКОЖ
- ФАЙЛИ
- АВТОРИ
- ЗВІТУВАННЯ ПРО ВАДИ
- ВАДИ
- ПЕРЕКЛАД
- bookworm 4.18.1-1
- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.25.0-1
BASH(1) | General Commands Manual | BASH(1) |
НАЗВА¶
bash — GNU Bourne-Again SHell
КОРОТКИЙ ОПИС¶
bash [параметри] [рядок_команди | файл]
АВТОРСЬКІ ПРАВА¶
Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc.
ОПИС¶
Bash є сумісним із sh інтерпретатором мови командного рядка, який виконує команди, прочитані зі стандартного джерела вхідних даних або з файла. У Bash також реалізовано корисні можливості оболонок Korn і C (ksh і csh).
Bash створено як сумісну реалізацію розділів щодо оболонки та допоміжних програм специфікації IEEE POSIX (стандарту IEEE 1003.1). Bash можна типово налаштувати на сумісність із POSIX.
ПАРАМЕТРИ¶
Усіма односимвольними параметрами оболонки, які документовано в описі вбудованої команди set, зокрема -o, можна скористатися як параметрами під час виклику оболонки. Крім того, під час виклику bash виконує обробку таких параметрів:
- -c
- Якщо вказано параметр -c, команди буде прочитано з першого аргументу, який не є параметром, рядок_команди. Якщо після аргументу рядок_команди вказано інші аргументи, перший аргумент буде пов'язано із $0, а усі інші аргументи — з наступними позиційними параметрами. Прив'язка до $0 встановлює назву оболонки, яку буде використано у повідомленнях із попередженнями та повідомленнях про помилки.
- -i
- Якщо вказано параметр -i, оболонка є інтерактивною.
- -l
- Наказує bash працювати так, наче програму викликано як оболонку для входу до системи (див. ВИКЛИК нижче).
- -r
- Якщо вказано параметр -r, оболонка стає обмеженою (див. ОБМЕЖЕНА ОБОЛОНКА нижче).
- -s
- Якщо вказано параметр -s або якщо після обробки параметрів не буде виявлено аргументів, команди буде прочитано зі стандартного джерела вхідних даних. За допомогою цього параметра можна встановлювати позиційні параметри при виклику інтерактивної оболонки або при читанні вхідних даних за допомогою конвеєра команд.
- -v
- Друкувати входові рядки оболонки під час виконання.
- -x
- Виводити команди та їхні аргументи при їхньому виконанні.
- -D
- Список усіх рядків у подвійних лапках, яким передуватиме $, буде виведено до стандартного виведення. Це рядки, які підлягатимуть перекладу, якщо поточною локаллю не є C або POSIX. Неявним чином буде також застосовано параметр -n. Команди оболонки не виконуватимуться.
- [-+]O [параметр_оболонки]
- параметр_оболонки є одним з параметрів оболонки, який приймає вбудований засіб shopt (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Якщо вказано параметр_оболонки, -O встановлює значення цього параметра; +O скасовує встановлення. Якщо параметр_оболонки не вказано, до стандартного виведення буде виведено назви і значення параметрів оболонки, які приймаються shopt. Якщо параметром виклику є +O, виведення буде показано у форматі, який може бути повторно використано як вхідні дані програми.
- --
- -- вказує на завершення параметрів і вимикає подальшу обробку параметрів. Будь-які аргументи після -- оброблятимуться як назви файлів та аргументи. Аргумент - є еквівалентним до --.
Крім того, bash обробляє декілька багатосимвольних параметрів. Ці параметри має бути вказано у командному рядку до односимвольних параметрів, щоб їх було розпізнано.
- --debugger
- Налаштовування для профілю засобу діагностики, який слід виконати до запуску оболонки. Вмикає розширений режим діагностики (див. опис параметра extdebug вбудованого засобу shopt нижче).
- --dump-po-strings
- Еквівалент -D, але виведення відбуватиметься у форматі файлів GNU gettext po (портативного об'єкта).
- --dump-strings
- Те саме, що і -D.
- --help
- Вивести повідомлення щодо користування до стандартного виведення і завершити роботу програми зі станом «успіх».
- --init-file файл
- --rcfile файл
- Виконати команди з файла файл замість загальносистемного файла ініціалізації /etc/bash.bashrc та стандартного особистого файла ініціалізації ~/.bashrc, якщо оболонка є інтерактивною (див. ВИКЛИК нижче).
- --login
- Еквівалент -l.
- --noediting
- Не використовувати бібліотеку GNU readline для читання рядків команд, якщо оболонка є інтерактивною.
- --noprofile
- Не читати або загальносистемний файл запуску /etc/profile або будь-які особисті файли ініціалізації ~/.bash_profile, ~/.bash_login або ~/.profile. Типово, bash читає ці файли при виклику у режимі оболонки входу до системи (див. ВИКЛИК нижче).
- --norc
- Не читати і не виконувати загальносистемний файл ініціалізації /etc/bash.bashrc та особистий файл ініціалізації ~/.bashrc, якщо оболонка є інтерактивною. Типово, цей параметр буде використано, якщо оболонку викликано за допомогою команди sh.
- --posix
- Змінити поведінку bash там, де типові дії відрізняються від стандарту POSIX так, щоб відповідати стандарту (режим posix). Див. розділ ТАКОЖ ПЕРЕГЛЯНЬТЕ, де наведено посилання на документ із подробицями щодо того, як режим posix впливає на поведінку bash.
- --restricted
- Оболонка стає обмеженою (див. ОБМЕЖЕНА ОБОЛОНКА нижче).
- --verbose
- Еквівалент -v.
- --version
- Вивести дані щодо версії цього екземпляра bash до стандартного виведення і завершити роботу зі станом виходу «успіх».
АРГУМЕНТИ¶
Якщо після обробки параметрів у рядку команди лишаться аргументи, і не вказано ні параметр -c, ні параметр -s, перший аргумент буде оброблено як назву файла, у якому зберігаються команди оболонки. Якщо bash викликано у такий спосіб, для $0 буде встановлено значення назви цього файла, а решту аргументів буде розподілено між іншими позиційними параметрами послідовно. Bash прочитає і виконає команди із вказаного файла, а потім завершить роботу. Кодом стану виходу bash буде код стану виходу останньої виконаної у скрипті команди. Якщо не буде виконано жодної команди, кодом стану виходу буде 0. Спершу буде виконано спробу відкрити файл у поточному каталозі. Якщо файла із вказаною назвою не буде знайдено, оболонка виконає пошук файла скрипту у каталогах змінної середовища PATH.
ВИКЛИК¶
A login shell є той, чий перший символ нульового аргументу є -, або той, що починається з параметра --login.
Інтерактивною є оболонка, яку запущено без аргументів, які не є аргументами параметрів (якщо не вказано параметр -s), і без параметра -c, чиї стандартні джерело вхідних даних та виведення помилок з'єднано з терміналами (як це визначено isatty(3)), або оболонка, яку запущено з параметром -i. Якщо bash є інтерактивною, встановлюється PS1, а $- включає i, що надає змогу скрипту оболонки або файлу запуску перевіряти відповідний стан.
Нижче наведено опис того, як bash виконує свої файли запуску. Якщо існує якийсь з цих файлів, але його не можна прочитати, bash повідомляє про помилку. Записи з тильдою розгортаються до назв файлів, як це описано нижче у підрозділі Розгортання з тильдою розділу РОЗГОРТАННЯ.
Якщо bash викликано як інтерактивну оболонку для входу до системи або неінтерактивну оболонку із параметром --login, програма спершу читає і виконує команди з файла /etc/profile, якщо такий файл існує. Після читання цього файла, відбувається пошук ~/.bash_profile, ~/.bash_login та ~/.profile, саме у цьому порядку. Програма прочитає і виконає команди з першого з цих файлів, який існує і придатний до читання. Для придушення такої поведінки можна при запуску оболонки скористатися параметром --noprofile.
При виході з інтерактивної оболонки для входу до системи або при виконанні у неінтерактивній оболонці вбудованої команди exit, bash читає і виконує команди з файла ~/.bash_logout, якщо такий існує.
Коли запущено інтерактивну оболонку, що не є оболонкою входу в систему, bash зчитує та виконує команди з /etc/bash.bashrc і ~/.bashrc, якщо ці файли існують. Це можна заблокувати опцією --norc. Використання параметра --rcfile файл змусить bash читати та виконувати команди з файлe замість /etc/bash.bashrc та ~/.bashrc.
Коли bash запущено неінтерактивно, щоб запустити скрипт оболонки, наприклад, воно шукає змінну BASH_ENV у оточенні, якщо знаходить, то розкриває її значення, і використовує розкрите значення, як назву файлу, який треба прочитати і виконати. Bash поводиться, ніби виконують наступну команду:
але значення змінної PATH не використовується для пошуку назви файлу.
Якщо bash викликано за назвою sh, програма намагатиметься якомога точніше імітувати поведінку після запуску давніх версій sh, не відхиляючись від стандарту POSIX. Якщо програму викликано як інтерактивну оболонку або неінтерактивну оболонку із параметром --login, програма намагатиметься прочитати і виконати команди з файлів /etc/profile та ~/.profile, саме у такому порядку. Для успадкування такої поведінки можна використати параметр --noprofile. Якщо програму викликано як інтерактивну оболонку із використанням назви sh, bash шукатиме на змінну ENV, розгортатиме її значення, якщо його визначено, і використовуватиме розгорнуте значення як назву файла для читання і виконання. Оскільки при виклику оболонки за назвою sh не намагатиметься прочитати і виконати команд з будь-яких інших файлів запуску, параметр --rcfile не працюватиме. Неінтерактивна оболонка, яку викликано за назвою sh, не намагатиметься прочитати будь-які інші файли запуску. При виклику за назвою sh, bash входить у режим posix після читання файлів запуску.
Якщо bash запущено у режимі posix або з параметром командного рядка --posix, програма виконуватиме усі настанови стандарту POSIX для файлів запуску. У цьому режимі інтерактивні оболонки розгортатимуть змінну ENV, читатимуть і виконуватимуть команди з файла, назва якого визначається розгорнутим значенням. Читання будь-яких інших файлів запуску не виконуватиметься.
Bash спробує визначити, чи запущено програму зі стандартним джерелом введення даних, яке з'єднано із з'єднанням мережі, зокрема, коли програму запущено давньою фоновою службою віддаленої оболонки, зазвичай rshd, або фоновою службою безпечної оболонки sshd. Якщо bash визначає, що програму запущено неінтерактивно у такий спосіб, програма читає і виконує команди з /etc/bash.bashrc і ~/.bashrc, якщо ці файли існують і є придатними до читання. Програма не робитиме цього, якщо її викликано з використанням назви sh. Щоб успадкувати цю поведінку, можна скористатися параметром --norc, а параметром --rcfile можна скористатися, щоб наказати програмі прочитати інший файл, але ні rshd, ні sshd загалом не викликають оболонку з такими параметрами і не дозволяють вказувати ці параметри.
Якщо оболонку запущено із використанням ідентифікатора ефективного користувача (групи) рівного ідентифікатору справжнього користувача (групи), і не вказано параметр -p, програма не читатиме жодних файлів запуску, функції оболонки не успадковуватимуться з середовища, змінні SHELLOPTS, BASHOPTS, CDPATH та GLOBIGNORE, якщо їх використано у середовищі, буде проігноровано, а для ідентифікатора ефективного користувача буде встановлено значення ідентифікатора справжнього користувача. Якщо при виклику буде використано параметр -p, поведінка при запуску буде тією самою, але значення ідентифікатора ефективного користувача не скидатиметься.
ОЗНАЧЕННЯ¶
У решті цього документа використано наведені нижче визначення.
- пропуск
- Пробіл або табуляція.
- слово
- Послідовність символів, яка обробляється оболонкою як єдиний модуль. Також відома як жетон.
- назва
- 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 або 1
залежно
від оцінки
умовного
виразу
вираз.
Вирази
складаються
з
первинних
частин,
описаних
нижче у
розділі
УМОВНІ
ВИРАЗИ.
Для слів
між [[ і ]] не
буде
виконано
поділ на
слова та
розгортання
шляхів.
Оболонка
виконає
розгортання
тильди,
розширення
параметрів
і змінних,
арифметичне
розширення,
підставляння
команд,
підставляння
процесу та
вилучення
лапок для
цих слів
(розгортання,
яке було б
виконано,
якщо б
слова було
взято у
подвійні
лапки).
Умовні
оператори,
такі як -f,
повинні
бути без
лапок, щоб
бути
визнаними
основними.
Якщо використано [[, оператори < і > лексикографічно упорядковуватимуться з використанням порядку поточної локалі.
Див. опис вбудованої команди test (розділ «ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ» нижче), щоб дізнатися більше про обробку параметрів (тобто про пропущені параметри).
Коли використовуються оператори == і !=, рядок праворуч від оператора вважається взірцем і відповідає правилам, описаним нижче в розділі Відповідність за взірцем, ніби було увімкнено параметр оболонки 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 достатньо для визначення повернутого значення усього виразу умови.
- for назва [ [ in [ слово ... ] ] ; ] do список ; done
- Список слів, за яким вказано in, розгортається у список записів. Для змінної назва встановлюється значення кожного з елементів списку за чергою, і кожного разу виконується список. Якщо пропущено слово in, команда for виконає список для усіх встановлених позиційних параметрів (див. ПАРАМЕТРИ нижче). Повернутий код стану буде кодом стану виходу останньої виконаної команди. Якщо розгортання записів за in призведе до створення порожнього списку, команди не виконуватимуться, а кодом стану повернення буде 0.
- for (( вираз1 ; вираз2 ; вираз3 )) ; do список ; done
- Спочатку, арифметичний вираз вираз1 обчислюється за правилами, описаними нижче у розділі АРИФМЕТИЧНІ ОБЧИСЛЕННЯ. Потім, обчислення арифметичного виразу expr2 повторюється поки не досягне нуля. Кожного разу, коли результатом обчислення виразу вираз2 є нуль, буде виконано список і обчислено арифметичний вираз вираз3. Якщо якогось виразу не буде виявлено, вважатиметься, що його значенням є 1. Повернутим значенням є стан виходу останньої команди список, яка виконалася, або false, якщо будь-який вираз є некоректним.
- select назва [ in слово ] ; do список ; done
- Список слів після in буде розгорнуто. Результатом буде список записів. Набір розгорнутих слів буде виведено до стандартного виведення помилок, перед кожним з яких буде дописано номер. Якщо буде пропущено слово після in, буде виведено позиційні параметри (див. ПАРАМЕТРИ нижче). Після цього select буде показано запит PS3 і прочитано рядок зі стандартного введення. Якщо рядок складається з номера, який відповідає одному зі показаних слів, слову буде надано значення назва. Якщо рядок є порожнім, слова і запит буде показано ще раз. Якщо буде прочитано символ кінця файла (EOF), виконання команди select завершується із поверненням стану 1. Будь-яке інше прочитане значення призведе до того, що параметру назва буде надано порожнє значення (null). Прочитаний рядок буде збережено у змінній REPLY. Список команд список буде виконано після кожного вибору варіанта, аж доки не буде виконано команду break. Станом виходу select є стан виходу останньої команди, яку буде виконано у списку список, або нуль, якщо не буде виконаної жодної команди.
- case слово in [ [(] взірець [ | взірець ] ... ) список ;; ] ... esac
- Команда case спочатку розгортає слово і намагається послідовно встановити його відповідність кожному із взірців взірець за допомогою правил встановлення відповідності, які описано у розділі Відповідність за взірцем нижче. Слово слово буде розгорнуто із використанням розгортання тильди, розгортання параметрів і змінних, арифметичних обчислень, заміни команд, підставляння процесів та вилучення лапок. Кожен із інспектованих взірців взірець буде розгорнуто із використанням розгортання тильди, розгортання параметрів і змінних, арифметичних обчислень, заміни команд, підставляння процесів та вилучення екранування. Якщо увімкнено параметр оболонки nocasematch, відповідність встановлюватиметься без врахування регістру символів абетки. Якщо буде встановлено відповідність, буде виконано відповідний список команд список. Якщо буде використано оператор ;;, після першого ж встановлення відповідності взірцю подальші спроби встановлення відповідності не виконуватимуться. Якщо використати ;& замість ;;, виконання продовжуватиметься із прив'язкою списку команд список до наступного набору взірців. Якщо використати ;;& замість ;;, оболонка виконає перевірку наступного списку взірців в інструкції, якщо такий є, і виконає будь-який пов'язаний із нею список команд список, якщо буде встановлено відповідність, продовжуючи виконання інструкцій варіанта так, наче не було встановлено відповідності списку взірців. Станом виходу є нуль, якщо жоден із взірців не є відповідним. Якщо якийсь із взірців виявиться відповідним, станом виходу буде стан виходу останньої виконаної у списку команд список команди.
- if список; then список; [ elif список; then список; ] ... [ else список; ] fi
- if список виконується. Якщо стан виходу дорівнює нулю — виконується then список. В іншому випадку по черзі виконується кожен elif список, якщо їхній стан виходу дорівнює нулю, то виконується відповідний then список і команда завершується. Інакше виконується else список, якщо наявний. Станом виходу є стан виходу останньої виконаної команди або нуль, якщо умова не перевірялася.
- while список-1; do список-2; done
- until список-1; do список-2; done
- Команда while послідовно виконує список команд список-2, доки остання команда у списку команд список-1 повертає нульовий стан виходу. Команда until є аналогічною до команди while, але умова у ній є оберненою: список команд список-2 виконуватиметься, доки остання команда у списку команд список-1 не поверне ненульовий стан виходу. Станом виходу команд while і until є стан виходу останньої виконаної команди у списку команд список-2 або нуль, якщо не було виконано жодної команди.
Копроцеси¶
Копроцес — команда оболонки, перед якою вказано зарезервоване слово coproc. Виконання копроцесу відбувається асинхронно у підоболонці так, наче команду було завершено керівним оператором &. При цьому, буде встановлено двобічний канал обміну даними між оболонкою, у якій виконується копроцес, і копроцесом.
Синтаксис для копроцесу:
coproc [НАЗВА] команда [переспрямування]
Створює копроцес із назвою НАЗВА. Аргументом команда може бути або проста команда, або складена команда (див. вище). Аргументом НАЗВА є назва змінної середовища. Якщо аргументу НАЗВА не вказано, типовою назвою є COPROC.
Рекомендована форма використання копроцесу:
coproc НАЗВА { команда [переспрямування]; }
Ця форма є рекомендованою, оскільки прості команди призводять до обов'язкового іменування копроцесу назвою COPROC, і нею простіше користуватися, вона є повнішою за інші складені команди.
Якщо команда є складеною командою, НАЗВА є необов'язковою. Слово після coproc визначає, чи буде слово оброблено як назву змінної: його буде оброблено як запис НАЗВА, якщо це не є зарезервованим словом, яке впроваджує складену команду. Якщо аргумент команда є простою командою, використовувати аргумент НАЗВА не можна; так зроблено, щоб уникнути плутанини між аргументом НАЗВА і першим словом простої команди.
При виконанні копроцесу оболонка створює змінну-масив (див. Масиви нижче) із назвою НАЗВА у контексті оболонки, з якої відбувається виконання. Стандартне виведення команди команда буде з'єднано за допомогою каналу обміну даними із дескриптором файла в оболонці, з якої відбувається виконання, і значення цього дескриптора файла буде надано елементу НАЗВА[0]. Стандартне джерело вхідних даних команди команда буде з'єднано за допомогою каналу із дескриптором файла у оболонці, з якої відбувається виконання, а значення цього дескриптора файла буде надано елементу НАЗВА[1]. Канал обміну даними буде встановлено до виконання будь-яких переспрямувань, які вказано командою (див. ПЕРЕСПРЯМУВАННЯ нижче). Дескрипторами файлів можна скористатися як аргументами команд оболонки з використанням стандартного розгортання слів. Підоболонки не матимуть доступу до дескрипторів файлів, окрім дескрипторів, які створено для виконання команд та підставляння процесів.
Доступ до ідентифікатора процесу оболонки, яку викликано для виконання копроцесу, можна отримати як значення змінної НАЗВА_PID. Для очікування на завершення копроцесу можна скористатися вбудованою командою wait.
Оскільки копроцеси створюються як асинхронні команди, команда coproc завжди повертає успіх. Стан вертання копроцесу є станом виходу команди.
Визначення функцій оболонки¶
Функція оболонки це обʼєкт, що викликається як проста команда і виконує складену команду з новим набором позиційних параметрів. Функція оболонки оголошується наступним чином:
- fname () складена_команда [переспрямування]
- function назва_функції [()] складена_команда [переспрямування]
- Ця команда визначає функцію із назвою назва_функції. Використання зарезервованого слова function є необов'язковим. Якщо вказано зарезервоване слово function, круглі дужки є необов'язковими. Вмістом функції є складена команда складена_команда (див. Складені команди вище). Ця команда, зазвичай, є списком команд між { і }, але може бути будь-якою командою з наведеного вище списку складених команд, якщо використано зарезервоване слово function, але круглі дужки не вказано, рекомендуємо використовувати фігурні дужки. Складену команду складена_команда буде викликано кожного разу, коли як назву простої команди використано назва_функції. У режимі posix назвв_функції має бути коректною назвою оболонки і не може збігатися із назвою однієї із спеціальних вбудованих команд POSIX. У типовому режимі назвою функції може бути будь-яке слово оболонки, що не містить лапок та символу $. Усі переспрямування (див. ПЕРЕСПРЯМУВАННЯ нижче), які вказано під час визначення функції, виконуватимуться під час виконання самої функції. Станом виходу визначення функції є нуль, якщо не буде виявлено синтаксичних помилок або призначеної лише для читання функції із тією самою назвою. При виконанні станом виходу функції є стан виходу останньої виконаної команди у її вмісті. (Див. ФУНКЦІЇ нижче.)
КОМЕНТАРІ¶
У неінтерактивній оболонці або у інтерактивній оболонці, у якій вбудованій команді shopt передано аргумент interactive_comments (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), якщо почати слово #, то решту символів у відповідному рядку буде проігноровано. У інтерактивній оболонці без параметра interactive_comments можливості додавання коментарів не передбачено. Параметр interactive_comments у інтерактивних оболонках типово увімкнено.
НЕЙТРАЛІЗАЦІЯ¶
Нейтралізацію використовують для усування спеціального призначення певних символів або слів у командній оболонці. Нейтралізацією можна скористатися для вимикання обробки спеціальних символів, для запобігання непотрібному розпізнаванню зарезервованих слів та для запобігання розгортанню параметрів.
Усі метасимволи з наведено у розділі ВИЗНАЧЕННЯ списку мають особливе значення для оболонки — їх слід нейтралізувати, якщо вони мають бути просто буквальними словами.
Якщо використано можливості доповнення за журналом команд (див. ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче), символ доповнення за журналом, зазвичай !, слід нейтралізувати для запобігання доповненню.
Передбачено три механізми нейтралізації: символ екранування, одинарні лапки і подвійні лапки.
Символ зворотної похилої риски без лапок (\) є символом екранування. Він зберігає буквальне значення наступного за ним символу, окрім символу <нового рядка>. Якщо буде виявлено пару \<новий рядок> і зворотну похилу риску не нейтралізовано символ \<новий рядок> буде оброблено як продовження рядка (тобто, його буде вилучено з потоку вхідних даних і, фактично, проігноровано).
Набір символів у одинарних лапках зберігає своє буквальне значення для кожного з символів у лапках. У межах взятого в одинарні лапки тексту не можна використовувати одинарні лапки, навіть якщо їх екрановано символом зворотної похилої риски.
Набір символів, взятий у подвійні лапки, зберігає буквальне значення для усіх символів у лапках, окрім символів $, `, \ і, якщо увімкнено доповнення за журналом, !. Якщо оболонка працює у режимі posix, ! не має особливого призначення у подвійних лапках, навіть якщо увімкнено доповнення за журналом. Символи $ і ` зберігають своє спеціальне значення у подвійних лапках. Символ зворотної похилої риски зберігає своє спеціальне значення, лише якщо за ним вказано один з таких символів: $, `, ", \ або <новий рядок>. Символ подвійних лапок можна екранувати у взятому у подвійні лапки фрагменті додаванням перед ним символу зворотної похилої риски. Якщо увімкнено доповнення за журналом, його буде виконано для !, якщо цей символ не екрановано символом зворотної похилої риски. Символ зворотної похилої риски перед ! не буде вилучено.
Спеціальні параметри * і @ зберігають спеціальне значення і у подвійних лапках (див. ПАРАМЕТРИ нижче).
Послідовності символів у формі $'рядок' оброблятимуться особливим чином, як особливий варіант одинарних лапок. Ці послідовності буде розгорнуто до рядка рядок, а екрановані символом зворотної похилої риски символи у рядку рядок буде замінено так, як це визначено стандартом ANSI C. Екрановані символом зворотної похилої риски послідовності, якщо такі буде виявлено, буде декодовано так:
- \a
- гудок (дзвінок)
- \b
- backspace
- \e
- \E
- символ скасування
- \f
- подавання бланку
- \n
- новий рядок
- \r
- повернення каретки
- \t
- горизонтальна табуляція
- \v
- вертикальна табуляція
- \\
- зворотна похила
- \'
- одинарна лапка
- \"
- подвійна лапка
- \?
- знак питання
- \nnn
- восьмибітовий символ, значенням якого є вісімкове значення nnn (від однієї до трьох вісімкових цифр)
- \xHH
- восьмибітовий символ, значенням якого є шістнадцяткове значення HH (від однієї до двох шістнадцяткових цифр)
- \uHHHH
- символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHH (від однієї до чотирьох шістнадцяткових цифр)
- \UHHHHHHHH
- символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHHHHHH (від однієї до восьми шістнадцяткових цифр)
- \cx
- символ control-x
Розгорнутий результат буде виразом в одинарних лапках, так, наче символу долара не було.
Взяття рядка у подвійні лапки, перед якими вказано символ долара ($"рядок") призведе до того, що рядок буде перекладено відповідно до поточної локалі. Пошук і переклад повідомлень буде виконано інфраструктурою gettext з використанням змінних оболонки LC_MESSAGES та TEXTDOMAIN. Якщо поточною локаллю є C або POSIX, якщо немає доступних перекладів або якщо рядок не перекладено, символ долара буде проігноровано. Це форма екранування подвійними лапками, отже рядок типово лишатиметься взятим у подвійні лапки, є він перекладеним або заміненим чи ні. Якщо увімкнено параметр noexpand_translation за допомогою вбудованої команди shopt, перекладені рядки буде взято в одинарні лапки, замість подвійних. Див. опис shopt нижче у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ.
ПАРАМЕТРИ¶
Параметром є запис, який зберігає значення. Це може бути назва, число або один із спеціальних символів, список яких наведено нижче у розділі Спеціальні параметри. Змінною будемо називати параметр, який позначено назвою. Змінна має значення і нуль, один або декілька атрибутів. Атрибути призначаються за допомогою вбудованої команди declare (див. declare нижче у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ).
Параметр встановлено, якщо йому надано значення. Коректним значенням є порожній рядок. Щойно змінну встановлено, встановлення можна скасувати лише за допомогою вбудованої команди unset (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Змінній можна надати значення за допомогою інструкції у формі
назва=[значення]
Якщо значення не задано, змінній буде надано значення порожнього рядка. У всіх значеннях буде виконано розгортання тильди, розгортання параметрів та змінних, заміни команд, арифметичні обчислення та вилучення лапок (див. РОЗГОРТАННЯ нижче). Якщо для змінної встановлено атрибут integer, значення буде обчислено як арифметичний вираз, навіть якщо не використано розгортання $((...)) (див. Арифметичні обчислення нижче). Поділ на слова та розгортання шляхів до файлів не виконуватимуться. Інструкції визначення значень також можуть бути аргументами вбудованих команд alias, declare, typeset, export, readonly та local (команди оголошення). У режимі posix ці вбудовані команди можуть з'являтися у команді після одного або декількох екземплярів вбудованих команд команда і зберігати ці властивості інструкції встановлення значення.
У контексті, де інструкція встановлення значення визначає значення змінної оболонки або індексу масиву, оператором += можна скористатися для дописування або додавання до попереднього значення змінної. Це стосується аргументів вбудованих команд, зокрема declare, які приймають інструкції зі встановлення значень (команд оголошення). Якщо += застосовано до змінної, Для якої встановлено integer атрибут, значення буде обчислено як арифметичний вираз і додано до поточного значення змінної, яке теж буде обчислено. Якщо += застосовано до змінної-масиву за допомогою складеного встановлення значення (див. Масиви нижче), значення змінної буде встановлено (як це було б у результаті застосування =), а ові значення буде дописано до масиву, починаючи з індексу, що на одиницю більший за поточний максимальний індекс масиву (для індексованих масивів), або додано як додаткові пари ключ-значення в асоціативних масивах. При застосуванні до змінної із рядковим значенням значення буде розгорнуто і дописано до значення змінної.
Змінній можна встановити атрибут nameref за допомогою параметра -n вбудованих команд declare і local (див. опис команд declare і local нижче) для створення nameref або посилання на іншу змінну. У такий спосіб можна працювати зі змінними опосередковано. Кожного разу при посиланні на змінну nameref, встановленні її значення, скасуванні встановлення значення або внесенні змін до атрибутів (окрім використання та зміни самого атрибуту nameref) дію буде виконано зі змінною, назвою якої є значення змінної nameref. Типовим використанням nameref у функціях оболонки є посилання на змінну, чия назва передається як аргумент функції. Наприклад, якщо назву змінної передано до функції оболонки як її перший аргумент, виконання
у межах функції створює змінну nameref ref, чиїм значенням є назва змінної, яку передано як перший аргумент. Посилання і встановлення значень, а також зміну її атрибутів буде оброблено як посилання, встановлення значень та внесення змін до атрибутів змінної, чию назву було передано як $1. Якщо керівна змінна у циклі for має атрибут nameref, при виконанні циклу список слів може бути списком змінних оболонки, а посилання на назву буде встановлено для кожного слова у списку за чергою. Змінним-масивам не можна надавати атрибут nameref. Втім змінні nameref можу посилатися на змінні-масиви і підписані змінні-масиви. Можна скасовувати значення записів nameref за допомогою параметра -n вбудованої команди unset. Якщо не додати такий параметр, при виконанні unset із аргументом назви змінної nameref буде скасовано встановлення назви для змінної, на яку посилається змінна nameref.
Позиційні параметри¶
Позиційний параметр — параметр, який позначено однією або декількома цифрами, окрім одинарної цифри 0. Значення позиційних параметрів встановлюються з аргументів оболонки при її виклику. Змінити значення параметрів можна за допомогою вбудованої команди set. Встановлювати значення позиційних параметрів не можна за допомогою звичайних інструкцій встановлення значень. Позиційні параметри тимчасово замінюються при виклику функції оболонки (див. ФУНКЦІЇ нижче).
Для розгортання позиційних параметрів, які складаються з декількох цифр, їх слід вказувати у фігурних дужках (див. РОЗГОРТАННЯ нижче).
Спеціальні параметри¶
Деякі з параметрів оболонка обробляє в особливий спосіб. На ці параметри можна лише посилатися. Встановлення їхнього значення у звичайний спосіб заборонено.
- *
- Розгортається у позиційні параметри, починаючи з першого. Якщо розгорнутий текст не перебуває у подвійних лапках, кожен позиційний параметр розгортатиметься в окреме слово. У контексті виконання ці слова підлягають подальшому поділу на слова і розгортанню назв шляхів. Якщо розгортання відбувається у подвійних лапках, воно відбуватиметься до одного слова, що складатиметься зі значень усіх параметрів, які буде відокремлено першим символом спеціальної змінної IFS. Тобто, "$*" еквівалентне до "$1c$2c...", де c — перший символ значення змінної IFS. Якщо значення змінної IFS не встановлено, параметри буде відокремлено пробілами. Якщо значення IFS є порожнім, параметри буде з'єднано без проміжних роздільників.
- @
- Розгортається у позиційні параметри, починаючи з першого. У контекстах, де виконується поділ на слова кожен позиційний параметр буде розгорнуто до окремого слова. Якщо розгортання відбувається не у подвійних лапках, ці слова також буде поділено на окремі слова. У контекстах, де не виконується поділу на слова, розгортання відбувається до одного слова, у якому позиційні параметри буде відокремлено пробілом. Якщо розгортання відбувається у подвійних лапках, кожен параметр розгорається до окремого слова. Тобто, "$@" еквівалентне до "$1" "$2" ... Якщо розгортання у подвійних лапках відбувається у межах слова, результат розгортання першого параметра об'єднується із початковою частиною початкового слова, а результат розгортання останнього параметра об'єднується із останньою частиною початкового слова. Якщо позиційних параметрів немає, "$@" і $@ ні до чого не розгортаються (тобто, їх буде вилучено).
- #
- Розгортається до числа позиційний параметрів у десятковому записі.
- ?
- Розгортається до коду стану виходу останнього виконаного конвеєра переднього плану.
- -
- Розкриває прапорці поточних опцій, що вказані при виклику, через вбудовану команду set, або встановлені самою оболонкою (як опція -i).
- $
- Розкриває ідентифікатор процесу оболонки. В підоболонці воно розкриває до ідентифікатора процесу поточної оболонки, а не підоболонки.
- !
- Розкриває ІД процесу завдання, що було покладено у фон останнім, або викликане асинхронною командою або черед вбудоване bg (див. JOB CONTROL нижче).
- 0
- Розкриває назву оболонки або скрипту оболонки. Воно встановлене під час ініціалізації оболонки. Якщо bash викликано файлом команд, $0 встановлюється в назву того файлу. Якщо bash запущено з опцією -c, тоді $0 встановлюється в перший аргумент після рядка для виконання, якщо він присутній. Інакше, воно встановлюється в назву файлу, якого використали для запуску bash, як надано нульовим аргументом.
Змінні оболонки¶
Оболонка встановлює значення таких змінних:
- _
- Під час запуску оболонки отримує значення шляху, який використано для виклику оболонки або назви скрипту, який виконується, у тому вигляді, у якому його передано у середовищі, або списку аргументів. Далі, після розгортання, розгортається до останнього аргументу попередньої простої команди, яку виконано в основному режимі. Також отримує значення повного шляху, який використано для виклику кожної виконаної команди, і записується до середовища, яке експортовано для цієї команди. При перевірці пошти цей параметр містить назву поштового файла, перевірку якого виконує програма.
- BASH
- Розгортається до повної назви файла, використано для виклику цього екземпляра bash.
- BASHOPTS
- Список відокремлених двокрапками увімкнених параметрів оболонки. Кожне слово у списку є коректним аргументом параметра -s вбудованої команди shopt (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Параметри, які з'являються у списку BASHOPTS, є тими параметрами, про які shopt звітує, як про увімкнені. Якщо у середовищі є ця змінна, при запуску bash кожен параметр оболонки у списку буде увімкнено до читання будь-яких файлів запуску. Цю змінну призначено лише для читання.
- BASHPID
- Розгортається до ідентифікатора поточного процесу bash. Це значення, за певних обставин, зокрема підоболонок, які не потребують повторної ініціалізації bash, відрізняється від $$. Спроба встановлення значення BASHPID ні на що не вплине. Якщо скасувати встановлення BASHPID, змінна втрачає свої особливі властивості, навіть якщо згодом значення буде повторно встановлено.
- BASH_ALIASES
- Змінна-асоціативний масив, елементи якого відповідають внутрішньому списку псевдонімів, який підтримується вбудованим засобом alias. Елементи, додані до цього масиву, відображаються в списку псевдонімів; однак скасування елементів масиву наразі не призводить до видалення псевдонімів зі списку псевдонімів. Якщо скасувати встановлення BASH_ALIASES, змінна втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
- BASH_ARGC
- Змінна-масив, значеннями якої є кількості параметрів у кожному кадрі поточного стека викликів виконання bash. Кількість параметрів поточної підпрограми (функції оболонки або сценарію, що виконується за допомогою . або source) міститься на вершині стека. Коли виконується підпрограма, кількість переданих параметрів передається в BASH_ARGC. Оболонка встановлює BASH_ARGC лише в режимі розширеного налагодження (див. нижче опис параметра extdebug вбудованого засобу shopt). Встановлення extdebug після того, як оболонка почала виконувати сценарій, або посилання на цю змінну, коли extdebug не встановлено, може призвести до невідповідних значень.
- BASH_ARGV
- Змінна-масив, яка містить всі параметрів у поточному стеку викликів виконання bash. Останній параметр останнього виклику підпрограми міститься на вершині стека; перший параметр початкового виклику - внизу. Коли виконується підпрограма, надані параметри передаються в BASH_ARGV. Оболонка встановлює BASH_ARGV лише в режимі розширеного налагодження (див. нижче опис параметра extdebug вбудованого засобу shopt). Встановлення extdebug після того, як оболонка почала виконувати сценарій, або посилання на цю змінну, коли extdebug не встановлено, може призвести до невідповідних значень.
- BASH_ARGV0
- При посиланні ця змінна розширюється до назви оболонки або сценарію оболонки (ідентичне $0; див. опис спеціальних параметрів 0 вище). Присвоєння BASH_ARGV0 призводить до присвоєння того ж значення $0. Якщо скасувати встановлення BASH_ARGV0, вона втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
- BASH_CMDS
- Змінна-асоціативний масив, елементи якого відповідають внутрішній геш-таблиці команд, якe підтримує вбудований засіб hash. Елементи, додані до цього масиву, з'являються в геш-таблиці; однак скасування елементів масиву наразі не призводить до видалення назв команд із геш-таблиці. Якщо скасувати встановлення BASH_CMDS, змінна втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
- BASH_COMMAND
- Команда, яка зараз виконується або має виконуватись, якщо оболонка не виконує команду в результаті пастки, і в цьому випадку це команда, яка виконується під час пастки. Якщо скасувати встановлення BASH_COMMAND, змінна втрачає свої особливі властивості, навіть якщо її згодом перевстановити.
- BASH_EXECUTION_STRING
- Аргумент команди до параметра виклику -c.
- BASH_LINENO
- Змінна-масив, чиї елементи є номерами рядків у файлах початкового коду, де викликано кожен відповідний елемент FUNCNAME. ${BASH_LINENO[$i]} є номером рядка у файлі початкового коду (${BASH_SOURCE[$i+1]}), де було викликано ${FUNCNAME[$i]} (або ${BASH_LINENO[$i-1]}, якщо на нього посилаються у іншій функції оболонки). Для отримання номера поточного рядка скористайтеся LINENO.
- BASH_LOADABLES_PATH
- Список відокремлених двокрапками каталогів, у яких оболонка буде шукати динамічно завантажувані вбудовані команди, які вказано командою enable.
- BASH_REMATCH
- Змінна-масив, чиїм елементам надають значення за допомогою двійкового оператора =~ у команді умови [[. Елемент із індексом 0 є частиною рядка, яка точно відповідає усьому формальному виразу. Елемент із індексом n є частиною рядка, яка відповідає n-ій взятій у круглі дужки частині виразу.
- BASH_SOURCE
- Змінна-масив, чиїми елементами є назви файлів початкового коду, де визначено відповідні назви функцій оболонки у змінній-масиві FUNCNAME. Функцію оболонки ${FUNCNAME[$i]} визначають у файлі ${BASH_SOURCE[$i]} і викликають з ${BASH_SOURCE[$i+1]}.
- BASH_SUBSHELL
- Збільшується на одиницю із кожним переходом до наступної підоболонки або середовища підоболонки, якщо оболонку запускають у цьому середовищі. Початковим значенням є 0. Якщо не встановлено значення BASH_SUBSHELL, втрачає свої особливі властивості, навіть якщо згодом значення буде встановлено.
- BASH_VERSINFO
- Призначена лише для читання змінна-масив, чиїми елементами є дані щодо версії поточного екземпляра bash. Елементи масиву мають такі значення:
- BASH_VERSINFO[0]
- Номер основної версії (випуск).
- BASH_VERSINFO[1]
- Номер проміжної версії (версія).
- BASH_VERSINFO[2]
- Рівень латки.
- BASH_VERSINFO[3]
- Версія збірки.
- BASH_VERSINFO[4]
- Стан випуску (наприклад, beta1).
- BASH_VERSINFO[5]
- Значення MACHTYPE.
- BASH_VERSION
- Розгортається до рядка, який описує версію цього екземпляра bash.
- COMP_CWORD
- Індекс у ${COMP_WORDS} слова, на якому перебуває курсор. Доступ до цієї змінної можна отримати лише у функціях оболонки, які викликають можливості програмованого доповнення тексту (див. Програмоване доповнення нижче).
- COMP_KEY
- Клавіша (або кінцева клавіша у послідовності клавіш), яка викликає поточну функцію доповнення.
- COMP_LINE
- Поточний рядок команди. Ця змінна доступна лише у функціях оболонки та зовнішніх командах, які викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче).
- COMP_POINT
- Індекс поточної позиції курсора відносно початку поточної команди. Якщо поточною позицією курсора є кінець поточної команди, значення цієї змінної дорівнює ${#COMP_LINE}. Ця змінна доступна лише у функціях оболонки та зовнішніх командах, які викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче).
- COMP_TYPE
- Встановлюють ціле значення, яке відповідає типу доповнення, яке призвело до виклику функції доповнення: TAB — звичайне доповнення, ? — доповнення за списком після послідовного натискання клавіші табуляції, ! — доповнення за списком варіантів при доповненні за частиною слова, @ — доповнення за списком, якщо слово лишається незмінним, або % — доповнення за меню. Ця змінна є доступною, лише у функціях оболонки і зовнішніх командах, які викликають можливості програмованого доповнення (див. Програмоване доповнення нижче).
- COMP_WORDBREAKS
- Набір символів, які бібліотека readline обробляє як роздільники слів при виконанні доповнення слів. Якщо не встановлено значення COMP_WORDBREAKS, втрачає свої особливі властивості, навіть якщо значення цієї змінної буде надалі встановлено повторно.
- COMP_WORDS
- Змінна-масив (див. Масиви нижче), що складається з окремих слів у поточному рядку команди. Рядок буде поділено на слова так, як його ділить readline, з використанням COMP_WORDBREAKS, як це описано вище. Ця змінна доступна лише у функціях оболонки, які викликають можливості програмованого доповнення (див. Програмоване доповнення нижче).
- COPROC
- Змінна-масив (див. Масиви нижче), яку створено для зберігання дескрипторів файлів для виведення та введення даних для копроцесу без назви (див. Копроцеси вище).
- DIRSTACK
- Змінна-масив (див. Масиви нижче), яка містить поточний вміст стосу каталогів. Каталоги буде розташовано у стосі у тому ж порядку, що і у списку, показаному вбудованою командою dirs. Встановленням значення для елементів цього масиву можна скористатися для внесення змін до записів каталогів у стосі, але додавання та вилучення каталогів слід користуватися вбудованими командами pushd і popd. Встановлення значення цієї змінної не змінюватиме поточного каталогу. Якщо значення DIRSTACK не встановлено, змінна втрачає свої особливі властивості, навіть якщо значення згодом буде встановлено.
- EPOCHREALTIME
- Кожне посилання на цей параметр буде розгорнуто до кількості секунд з моменту початку епохи Unix (див. time(3)) у форматі з рухомою крапкою і точністю до мікросекунд. Спроби встановити значення для EPOCHREALTIME буде проігноровано. Якщо значення EPOCHREALTIME не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- EPOCHSECONDS
- Кожне посилання на цей параметр буде розгорнуто до кількості секунд з моменту початку епохи Unix (див time(3)). Спроби встановити значення для EPOCHSECONDS буде проігноровано. Якщо значення EPOCHSECONDS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- EUID
- Розгортається до ідентифікатора ефективного користувача поточного користувача. Ініціалізується під час запуску оболонки. Цю змінну призначено лише для читання.
- FUNCNAME
- Змінна-масив,
яка
містить
назви усіх
функцій
оболонки у
поточному
стеку
викликів.
Елемент із
індексом 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 буде проігноровано. Якщо значення GROUPS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- HISTCMD
- Номер у журналі або індекс у списку журналу поточної команди. Спроби встановити значення HISTCMD буде проігноровано. Якщо значення HISTCMD не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- HOSTNAME
- Автоматично заповнюється назвою поточного вузла.
- HOSTTYPE
- Автоматично встановлюється значення рядка, який унікальним чином описує тип комп'ютера, на якому запущено bash. Типове значення залежить від системи.
- LINENO
- Кожне посилання на цей параметр буде замінено на десяткове число, яке відповідає поточному послідовному номеру рядка (відлік починається з 1) у скрипті або функції. Якщо параметр використано не у скрипті або функції, підставлене значення може бути беззмістовним. Якщо значення LINENO не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- MACHTYPE
- Автоматично встановлюється значення рядка, який повністю описує тип операційної системи, у якій запущено bash у форматі, який визначено стандартом GNU процесор-компанія-система. Типове значення залежить від системи.
- MAPFILE
- Змінна-масив (див Масиви нижче), яку створено для зберігання тексту, який прочитано за допомогою вбудованої команди mapfile, яку виконано без визначення назви змінної.
- OLDPWD
- Попередній робочий каталог, який було встановлено командою cd.
- OPTARG
- Значення останнього аргументу параметра, яке оброблено вбудованою командою getopts (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
- OPTIND
- Індекс наступного аргументу параметра, який буде оброблено вбудованою командою getopts (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
- OSTYPE
- Автоматично встановлюється значення рядка, який описує операційну систему, у якій запущено bash. Типове значення залежить від системи.
- PIPESTATUS
- Змінна-масив (див Масиви нижче), у якій зберігається список значень кодів стану виходу від процесів у найсвіжішому виконаному основному конвеєрі команд (який може містити і лише одну команду).
- PPID
- Ідентифікатор процесу батьківського процесу оболонки. Цю змінну призначено лише для читання.
- PWD
- Поточний робочий каталог, який було встановлено командою cd.
- RANDOM
- Кожен раз, коли використовується цей параметр, програма розгортає його до випадкового цілого числа у межах від 0 до 32767. Наданням RANDOM значення можна ініціалізувати послідовність псевдовипадкових чисел. Якщо значення RANDOM не встановлено, змінна втрачає особливі властивості, навіть якщо її значення згодом буде встановлено повторно.
- READLINE_ARGUMENT
- Будь-який числовий аргумент, наданий команді readline, який було визначено за допомогою "bind -x" (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), коли її було викликано.
- READLINE_LINE
- Вміст буфера рядків readline для використання з "bind -x" (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
- READLINE_MARK
- Позиція позначки (збереженої точки вставлення) у буфері рядків readline для використання з "bind -x" (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Символи між точкою вставлення та позначкою часто називають областю.
- READLINE_POINT
- Позиція точки вставлення у буфері рядків readline для використання з "bind -x" (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
- REPLY
- Встановлюється значення рядка вхідних даних, який прочитано командою read, якщо цій команді не передано жодних аргументів.
- SECONDS
- Кожен запис цього параметра буде замінено на кількість секунд, які минули із моменту виклику оболонки. Якщо інструкцією буде встановлено значення SECONDS, значення яким буде замінено наступні записи параметра визначатиметься як кількість секунд, які минули з моменту встановлення значення разом із встановленим значенням. Кількість секунд з моменту виклику оболонки та поточний час завжди визначатиметься за допомогою запитів до годинника системи. Якщо значення SECONDS не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- SHELLOPTS
- Список відокремлених двокрапками увімкнених параметрів оболонки. Кожне слово у списку є коректним аргументом параметра -o вбудованої команди set (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). Параметри, які з'являються у списку SHELLOPTS, є тими параметрами, про які set -o звітує, як про увімкнені. Якщо у середовищі є ця змінна, при запуску bash кожен параметр оболонки у списку буде увімкнено до читання будь-яких файлів запуску. Цю змінну призначено лише для читання.
- SHLVL
- Збільшується на одиницю кожного разу, коли запускається екземпляр bash.
- SRANDOM
- Кожен запис цієї змінної розгортається у 32-бітове псевдовипадкове число. Генератор випадкових чисел є нелінійним у системах, де передбачено підтримку /dev/urandom або arc4random, отже усі повернуті числа не пов'язано із попередніми. Встановлення бази випадковості не передбачено, тому спроби встановлення для цієї змінної значення буде проігноровано. Якщо значення SRANDOM не встановлено, змінна втрачає свої особливі властивості, навіть якщо згодом її значення буде встановлено.
- UID
- Розгортається до ідентифікатора поточного користувача. Ініціалізується під час запуску оболонки. Цю змінну призначено лише для читання.
Оболонка використовує описані нижче змінні. У деяких випадках bash призначає типове значення змінної. Нижче для таких випадків наведено нотатки.
- BASH_COMPAT
- Значення використовують для встановлення рівня сумісності оболонки. Опис різних рівнів сумісності та їхнього впливу на роботу оболонки наведено у розділі РЕЖИМ СУМІСНОСТІ ОБОЛОНКИ. Значення може бути десятковий дріб (наприклад, 4.2) або ціле число (наприклад, 42), яке відповідає бажаному рівню сумісності. Якщо значення BASH_COMPAT не встановлено або встановлено значення порожнього рядка, рівень сумісності буде типовим для поточної версії програми. Якщо для BASH_COMPAT встановлено значення, яке не є коректним значенням рівня сумісності, оболонка виведе повідомлення про помилку і встановить рівень сумісності, який є типовим для поточної версії оболонки. Коректні рівні сумісності описано нижче у розділі BРЕЖИМ СУМІСНОСТІ ОБОЛОНКИ. Наприклад, 4.2 і 42 є коректними значеннями, які відповідають параметру compat42 команди shopt і встановлюють рівень сумісності 42. Коректним значенням також є номер поточної версії оболонки.
- BASH_ENV
- Якщо встановлено значення цього параметра, коли bash виконує скрипт оболонки, це значення буде оброблено як назву файла, який містить команди для ініціалізації оболонки, як у ~/.bashrc. Значення BASH_ENV буде оброблено із розгортанням параметрів, заміною команд та арифметичними обчисленнями, перш ніж його буде використано як назву файла. Для пошуку потрібного файла не буде використано змінну PATH.
- BASH_XTRACEFD
- Якщо встановлено значення цілого числа, яке відповідає коректному дескриптору файла, bash запише створені під час виконання дані трасування, якщо увімкнено set -x для цього дескриптора файла. Дескриптор файла буде закрито у відповідь на скасування встановлення значення BASH_XTRACEFD або встановлення нового значення для цієї змінної. Якщо значення BASH_XTRACEFD не встановлено або встановлено значення порожнього рядка, дані трасування буде надіслано до стандартного виведення помилок. Зауважте, що встановлення для BASH_XTRACEFD значення 2 (дескриптор файла стандартного виведення помилок) з наступним скасуванням встановлення значення призведе до закриття стандартного виведення помилок.
- CDPATH
- Шлях пошуку для команди cd. Це список записів каталогів, які відокремлено двокрапками, у якому оболонка шукатиме каталоги призначення, які вказано командою cd. Зразок значення: ".:~:/usr".
- CHILD_MAX
- Встановити кількість значень стану завершених дочірніх процесів, які має зберігати оболонка. Bash забороняє зменшення цього значення до рівня, який є нижчим за обов'язковий мінімум POSIX. Передбачено також максимальне значення (у поточній версії 8192), яке теж не можна перевищувати. Мінімальне значення залежить від системи.
- COLUMNS
- Використовується у складеній команді select для визначення ширини термінала при виведенні списків вибору. Буде встановлено автоматично, якщо увімкнено параметр checkwinsize або в інтерактивній оболонці при отриманні SIGWINCH.
- COMPREPLY
- Змінна-масив, з якої bash читає можливі доповнення, створені функцією оболонки, яку викликано можливостями програмованого доповнення (див. Програмоване доповнення нижче). У кожному з елементів масиву міститься можливий варіант доповнення.
- EMACS
- Якщо bash виявить цю змінну у середовищі, коли оболонку буде запущено зі значенням "t", програма припускатиме, що оболонку запущено у режимі буфера оболонки Emacs, і вимкне редагування рядка.
- ENV
- Розгортається і виконується подібно до BASH_ENV (див. ВИКЛИК вище) при виклику інтерактивної оболонки у режимі posix.
- EXECIGNORE
- Список відокремлених двокрапками взірців оболонки (див. Відповідність за взірцем), який визначає список назв файлів, які буде проігноровано при пошуку команди із використанням PATH. Файли, назви яких збігатимуться з одним із цих взірців не вважатимуться виконуваними у списку доповнення і виконання команд при пошуку у каталогах PATH. Це не стосуватиметься поведінки команд [, test і [[. Використання EXECIGNORE не стосується повних шляхів до файлів у таблиці хешів команд. Цією змінною можна скористатися для ігнорування файлів бібліотек спільного використання, для яких встановлено біт виконання, але які не є виконуваними файлами. При встановленні відповідності взірцю буде враховано значення параметра оболонки extglob.
- FCEDIT
- Типовий редактор для вбудованої команди fc.
- FIGNORE
- Список відокремлених двокрапками суфіксів, які слід ігнорувати під час автоматичного доповнення назв файлів (див. READLINE нижче). Назви файлів, чиї суфікси збігаються із одним із записів у FIGNORE, буде виключено зі списку відповідних назв файлів. Зразок значення ".o:~" (Використання лапок є обов'язковим при встановленні для цієї змінної значення, яке містить тильди).
- FUNCNEST
- Якщо встановлено числове додатне значення, визначає максимальний рівень вкладеності функцій. Виклики функцій, у яких перевищено рівень вкладеності, призводять до аварійного завершення виконання поточної команди.
- GLOBIGNORE
- Список відокремлених двокрапками взірців, який визначає набір назв файлів, які буде проігноровано при розгортанні шляхів. Якщо назва файла відповідає взірцю розгортання шляху також відповідає одному із взірців у GLOBIGNORE, її буде вилучено зі списку відповідників.
- HISTCONTROL
- Список відокремлених двокрапками значень, які визначають спосіб збереження команд у списку журналу. Якщо до списку значень включено ignorespace, рядки, які починаються з символу пробілу не буде збережено у списку журналу. Значення ignoredups призведе до того, що рядки, які збігаються із попереднім записом у журналі, не буде збережено. Значення ignoreboth є скороченням для поєднання ignorespace і ignoredups. Значення erasedups призведе до того, що усі попередні рядки, які збігаються із поточним рядком буде вилучено зі списку журналу перед збереженням у ньому поточного рядка. Усі інші значення, окрім описаних вище, буде проігноровано. Якщо не встановлено значення HISTCONTROL або у встановленому значенні немає коректних записів, обробник читатиме і зберігатиме у списку журналу усі рядки, які узгоджуються зі значенням HISTIGNORE. Другий і наступні рядки багаторядкових складених команд не перевірятимуться, їх буде додано до журналу без врахування значення HISTCONTROL.
- HISTFILE
- Назва файла, у якому буде збережено журнал команд (див. HISTORY нижче). Типовим значенням є ~/.bash_history. Якщо значення не встановлено, при виході з оболонки журнал команд збережено не буде.
- HISTFILESIZE
- Максимальна кількість рядків, які можуть міститися у файлі журналу. Якщо цій змінній надано значення, файл журналу буде обрізано, якщо це потрібно, так, щоб у ньому містилося не більше вказаної кількості рядків — буде вилучено найстаріші записи. Файл журналу також буде обрізано до цього розміру після запису до нього під час виходу з оболонки. Якщо значенням змінної є 0, файл журналу буде обрізано до нульового розміру. Нечислові значення або від'ємні числові значення призводять до заборони обрізання. Оболонка встановлює типове значення за значенням HISTSIZE після читання усіх файлів запуску оболонки.
- HISTIGNORE
- Список відокремлених двокрапками взірців, які буде використано для вибору команд, які слід зберегти у списку журналу. Кожен взірець буде прив'язаний до початку рядка і має збігатися із усім рядком (без неявного додавання «*»). Перевірку відповідності кожного з взірців рядку буде виконано після застосування перевірок, які визначено HISTCONTROL. Окрім звичайних символів відповідності взірців, «&» відповідає попередньому рядку у журналі. «&» можна екранувати за допомогою символу зворотної похилої риски; зворотну похилу риску буде вилучено перед спробою встановлення відповідності. Перевірка другого і наступних рядків багаторядкової складеної команди не виконуватиметься — ці рядки буде додано до журналу, незалежно від значення HISTIGNORE. При встановленні відповідності за взірцем буде враховано значення параметра оболонки extglob.
- HISTSIZE
- Кількість команд, які слід зберігати у журналі команд (див. ЖУРНАЛ нижче). Якщо значенням є 0, збереження команд до списку команд не виконуватиметься. Якщо значення є від'ємним, до списку журналу зберігатимуться усі команди (без обмежень на кількість). Після читання файлів запуску оболонка встановлює типове значення 500.
- HISTTIMEFORMAT
- Якщо ця змінна встановлена і її значення не порожнє (null), воно використовується як рядок форматування strftime(3) щоб надрукувати позначку часу, пов’язану з кожним записом журналу, що виводиться вбудованою командою history. Якщо ця змінна встановлена, мітки часу записуються до файлу журналу, щоб вони могли зберігатися протягом сеансів оболонки. Щоб відрізнити позначки часу від інших рядків журналу, використовується символ коментаря журналу.
- HOME
- Домашній каталог поточного користувача; типовий аргумент для вбудованої команди cd. Значення цієї змінної також використовується при розгортанні записів із тильдою.
- HOSTFILE
- Містить назву файла у тому самому форматі, що і /etc/hosts яку слід прочитати, коли оболонка має доповнити назву вузла. Список можливих завершень назви вузла можна змінити під час роботи оболонки; за наступної спроби завершення назви вузла після зміни значення, bash додасть вміст нового файлу до наявного списку. Якщо HOSTFILE встановлено, але не має значення або не називає файлу для читання, bash намагається прочитати /etc/hosts для отримання списку можливих варіантів завершення назви вузла. Якщо надати HOSTFILE порожнє значення, список назв вузлів буде спорожнено.
- IFS
- Внутрішній роздільник полів (Internal Field Separator), який буде використано для поділу тексту на слова після розгортання і для поділу рядків на слова за допомогою вбудованої команди read. Типовим значенням є “<space><tab><newline>”.
- IGNOREEOF
- Визначає дію інтерактивної оболонки у відповідь на отримання символу EOF як єдиного елемента вхідних даних. Якщо встановлено значення, воно вважатиметься кількістю послідовних символів EOF, які має бути введено як перші символи рядків вхідних даних, перш ніж bash завершить роботу. Якщо змінна існує, але не має числового значення або взагалі не має значення, буде використано типове значення 10. Якщо змінної не існуватиме, для оболонки EOF буде кінцем введення.
- INPUTRC
- Назва файла запуску readline. Перевизначає типову назву ~/.inputrc (див. READLINE нижче).
- INSIDE_EMACS
- Якщо у середовищі є ця змінна на момент запуску оболонки, bash припускає, що програму запущено всередині буфера оболонки і може вимкнути редагування рядків, залежно від значення змінної TERM.
- LANG
- Використовується для визначення категорії локалі для усіх категорій, які не було окремо вибрано за допомогою змінної, назва якої починається з LC_.
- LC_ALL
- Значення цієї змінної має вищий пріоритет за значення LANG та будь-якої іншої змінної LC_, яка визначає категорію локалі.
- LC_COLLATE
- Ця змінна визначає порядок сортування, який буде використано при упорядковуванні результатів розгортання шляхів до файлів, та визначає поведінку при розгортанні діапазонів, класів еквівалентності та схем упорядковування при розгортанні шляхів та встановленні відповідності за взірцем.
- LC_CTYPE
- Ця змінна визначає спосіб обробки символів та поведінку класів символів при розгортанні шляхів до файлів та встановленні відповідності за взірцем.
- LC_MESSAGES
- Ця змінна визначає локаль, яку буде використано для трансляції рядків у подвійних лапках, яким передує символ $.
- LC_NUMERIC
- Ця змінна визначає категорію локалей, яку буде використано для форматування чисел.
- LC_TIME
- Ця змінна визначає категорію локалей, яку буде використано для форматування записів дати і часу.
- LINES
- Використовується у складеній команді select для визначення довжини стовпчика при виведенні списків вибору. Буде встановлено автоматично, якщо увімкнено параметр checkwinsize або в інтерактивній оболонці при отриманні SIGWINCH.
- Якщо для цього параметра встановлено значення назви файла або каталогу, і не встановлено значення змінної MAILPATH, bash повідомлятиме користувачеві про надходження пошти до вказаного файла або каталогу у форматі Maildir.
- MAILCHECK
- Визначає наскільки часто (у секундах) bash має перевіряти пошту. Типовим значенням є 60 секунд. Коли настане момент перевірити пошту, оболонка виконає відповідні дії до показу основного запиту. Якщо значення цієї змінної не встановлено або встановлено значення, яке не є додатним або нульовим, оболонка вимкне перевірку пошти.
- MAILPATH
- Список відокремлених двокрапками назв файлів, у яких слід шукати пошту. Повідомлення, яке буде виведено при надходженні пошти до певного файла, можна вказати, відокремивши назву файла від повідомлення за допомогою «?». Якщо використати $_ у тексті повідомлення, змінну буде розгорнуто до назви поточного поштового файла. Приклад:
MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'
Bash можна налаштувати на надання типового значення для цієї змінної (стандартного значення не передбачено), але розташування файлів пошти користувача, яке використовуватиме оболонка, залежить від системи (наприклад, /var/mail/$USER).
- OPTERR
- Якщо встановлено значення 1, bash виводитиме повідомлення про помилки, які створено вбудованою командою getopts (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче). OPTERR буде ініціалізовано значенням 1 кожного разу, коли викликатиметься оболонка або виконуватиметься скрипт оболонки.
- PATH
- Шлях пошуку для команд. Це список відокремлених двокрапками записів каталогів, у яких оболонка шукатиме команди (див. ВИКОНАННЯ КОМАНД нижче). Назва каталогу нульової довжини (null) у значенні PATH позначає поточний каталог. Порожня назва каталогу може з'являтися як два сусідніх стовпчики або початковий чи кінцевий стовпчик. Типовий шлях залежить від системи і визначається адміністратором, який встановив bash. Стандартним значенням є ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
- POSIXLY_CORRECT
- Якщо ця змінна є частиною середовища на момент запуску bash, оболонка перейде у режим posix до читання файлів запуску, так, наче було вказано параметр виклику --posix. Якщо встановити значення змінної під час роботи оболонки, bash увімкне режим posix так, наче було виконано команду set -o posix Коли оболонка переходить у режим posix, вона встановлює значення для цієї змінної, якщо це значення ще не було встановлено.
- PROMPT_COMMAND
- Якщо встановлено значення цієї змінної, і цим значенням є масив, о показу кожного з основних запитів буде виконано значення кожного із елементів масиву. Якщо значення встановлено, але воно не є масивом, це значення буде використано як команду, яку слід виконати.
- PROMPT_DIRTRIM
- Якщо встановлено додатне значення, це значення буде використано як кількість кінцевих компонентів запису каталогу, які слід зберегти при розгортанні екранованих послідовностей запитів \w і \W (див. ЗАПИТИ нижче). Вилучені символи буде замінено трьома крапками.
- PS0
- Значення цього параметра буде розгорнуто (див. ЗАПИТИ нижче) і виведено інтерактивними оболонками після читання команди і перед її виконанням.
- PS1
- Значення цього параметра розгортається (див. ЗАПИТИ нижче) і використовується як основний рядок запиту. Типове значення — “\s-\v\$ ”.
- PS2
- Значення цього параметра розгортається, як з PS1, і використовується як вторинний рядок запиту. Типове значення — “> ”.
- PS3
- Значення цього параметра використовується як запит для команди select (див. ГРАМАТИКА ОБОЛОНКИ вище).
- PS4
- Значення цього параметра буде розгорнуто, як і PS1, а значення буде виведено перед кожною командою, яку bash виведе під час виконання. Перший символ розгорнутого значення PS4, за потреби, буде відтворено декілька разів для позначення декількох рівнів опосередкованості. Типовим значенням є “+ ”.
- SHELL
- Ця змінна розгортається до повного шляху до оболонки. Якщо не встановлено під час запуску оболонки, bash встановлює для неї значення повного шляху до оболонки входу до системи поточного користувача.
- TIMEFORMAT
- Значення цього параметра використовується як рядок формату, що визначає, як слід показувати інформацію про час для конвеєрів із префіксом time. Символ % розпочинає escape-послідовність, яка розширюється до значення часу або іншої інформації. Escape-послідовності та їх значення такі; дужки позначають необов'язкові частини.
- %%
- Символ %.
- %[p][l]R
- Тривалість виконання у секундах.
- %[p][l]U
- Кількість секунд, протягом яких процесор було задіяно у режимі користувача.
- %[p][l]S
- Кількість секунд, протягом яких процесор було задіяно у режимі системи.
- %P
- Частка часу процесора, яку обчислено за формулою (%U + %S) / %R.
- Необов'язкове p є цифрою, яка визначає точність, кількість цифр дробової частини після десяткової крапки. Значення 0 означає, що не слід виводити ні крапку, ні дробову частину. Можна вказати до трьох позицій після десяткової крапки; значення p, які є більшим за 3, буде просто замінено на 3. Якщо p не вказано, буде використано значення 3.
- Необов'язкове l визначає довгий формат, включено із хвилинами, форми MMmSS.FFs. Значення p визначає, чи слід включати дробову частину.
- Якщо значення цієї змінної не встановлено, bash працюватиме так, наче вона має значення $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. Якщо значення є порожнім, дані щодо часу виведено не буде. При виведенні рядка форматування буде додано кінцевий символ нового рядка.
- TMOUT
- Якщо встановлено додатне значення, TMOUT вважатиметься типовим часом очікування для вбудованої команди read. Команда select завершить роботу, якщо вхідні дані не буде отримано протягом TMOUT секунд, якщо вхідні дані надходять з термінала. В інтерактивній оболонці значення буде використано як кількість секунд, протягом яких слід очікувати на рядок вхідних даних після показу основного запиту. Bash завершить роботу після очікування протягом вказаної кількості секунд, якщо не буде отримано повного рядка вхідних даних.
- TMPDIR
- Якщо встановлено, bash використовує значення як назву каталогу, у якому bash створює тимчасові файли для використання в оболонці.
- auto_resume
- Ця змінна керує тим, як оболонка взаємодіє із користувачем і керуванням завданнями. Якщо встановлено значення цієї змінної, прості команди з одного слова без переспрямувань вважатимуться кандидатами на відновлення наявного зупиненого завдання. Двозначність заборонено: якщо існує декілька завдань, записи яких починаються із введеного рядка, буде вибрано завдання, доступ до якого було здійснено останнім. Назва зупиненого завдання у цьому контексті є рядком команди, яку використано для його запуску. Якщо встановлено значення exact, визначений рядок має відповідати назві зупиненого завдання точно; якщо встановлено значення substring, визначений рядок має збігатися із підрядком у назві зупиненого завдання. Значення substring працює подібно до ідентифікатора завдання %? (див. КЕРУВАННЯ ЗАВДАННЯМИ нижче). Якщо встановлено будь-яке інше значення, визначений рядок має бути префіксом назви зупиненого завдання; це працює подібно до ідентифікатора завдання %рядок.
- histchars
- Два або три символи, які керують доповненням за журналом та поділом на жетони (див. ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче). Перший символ є символом доповнення за журналом, символом, який сигналізує про початок доповнення за журналом, зазвичай, «!». Другий символ є символом швидкого підставляння, який використовують як скорочення для повторного запуску попередньої введеної команди, із заміною одного рядка на інший у команді. Типовим є символ «^». Необов'язковий третій символ є символом, який позначає, що решта рядка є коментарем, якщо буде виявлено, що це перший символ слова. Зазвичай, цим символом є «#». Поява символу коментаря у журналі призводить до того, що заміну за журналом у решті слів рядка буде пропущено. Це не обов'язково призведе до того, що засіб обробки команд оболонки вважатиме решту рядка коментарем.
Масиви¶
У bash передбачено одновимірні індексовані та асоціативні змінні-масиви. Як індексований масив можна використати будь-яку змінну. Масив явним чином оголошується вбудованою командою declare. Обмеження на максимальний розмір масиву не передбачено, як і вимоги, щоб усі елементи було індексовано або асоційовано неперервно. Посилання на елементи індексованих масивів здійснюється за допомогою цілих чисел (включно із арифметичними виразами). Нумерація починається з нуля. Посилання на елементи асоціативних масивів здійснюється з використанням довільних рядків. Якщо це явно не визначено, індекси в індексованому масиві мають бути невід'ємними цілими числами.
Індексований масив буде створено автоматично, якщо будь-якій змінній буде надано значення з використанням синтаксичної конструкції назва[підпис]=значення. Значення підпис буде оброблено як арифметичний вираз, результатом обчислення якого має бути число. Щоб явним чином оголосити індексований масив, скористайтеся командою 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, без використання синтаксису розгортання слів, описаного вище, аргумент підлягатиме розгортанню шляхів до файлів. Якщо розгортання шляхів до файлів є небажаним, аргумент слід взяти у лапки.
Вбудовані команди declare, local та readonly приймають параметр -a для визначення індексованого масиву та параметр -A для визначення асоціативного масиву. Якщо вказано обидва параметри, пріоритет має параметр -A. Вбудована команда read приймає параметр -a для призначення списку слів, які прочитано зі стандартного джерела вхідних даних, до масиву. Вбудовані команди set і declare показують значення масиву у спосіб, яким можна скористатися для встановлення значень нового масиву.
РОЗГОРТАННЯ¶
Розгортання буде виконано у рядку команди після того, як його буде поділено на слова. Передбачено виконання семи типів розгортання: розгортання у дужках, розгортання тильди, розгортання параметрів і змінних, заміна команд, арифметичні обчислення, поділ на слова та розгортання шляхів.
Порядок розгортань є таким: розгортання у дужках; розгортання тильди, розгортання параметрів і змінних, арифметичні обчислення і заміна команд (буде виконано зліва праворуч); поділ на слова і розгортання шляхів.
У системах, де передбачено відповідну підтримку, доступним є ще одне розгортання: заміна процесу. Це розгортання буде виконано одночасно із розгортанням тильди, розгортанням параметрів і змінних, арифметичними обчисленнями і заміною команд.
Після виконання цих розгортань символи лапок у початковому слові буде вилучено, якщо їх не було взято у лапки (вилучення лапок).
Збільшити кількість слів у розгортанні можуть лише розгортання у дужках, поділ на слова і розгортання шляху; інші розгортання розгортають одинарне слово у одинарне слово. Єдиним виключенням є розгортання "$@" та "${назва[@]}", а також, здебільшого, $* та ${назва[*]}, як це описано вище (див. ПАРАМЕТРИ).
Розгортання у дужках¶
Розгортання у дужках є механізмом, за яким може бути створено довільні рядки. Цей механізм подібний до розгортання шляхів, але породжені назви файлів можуть бути і назвами файлів, які не існують. Взірці, які буде оброблено розгортанням у дужках, складаються з необов'язкової вступної частини, за якою має бути вказано або послідовність відокремлених комами рядків, або послідовність виразів у парі фігурних дужок, яку завершує необов'язкова кінцева частина. Вступну частину буде дописано перед кожним рядком у фігурних дужках, а потім до кожного з результатів буде дописано кінцеву частину. Розгортання відбувається зліва праворуч.
Розгортання у дужках може бути вкладеним. Результати розгортання кожного рядка не упорядковуються; зберігається порядок зліва праворуч. Приклад: a{d,c,b}e буде розгорнуто у «ade ace abe».
Вираз послідовності має форму {x..y[..крок]}, де x і y є або цілими числами або одинарними літерами, а крок, необов'язковий крок у послідовності, є цілим числом. Якщо вказано цілі числа, вираз розгортається до кожного цілого числа від x до y, включно. До вказаних цілих чисел можна дописати префікс 0, щоб усі елементи у послідовності мали однакову довжину. Якщо x або y починається з нуля, оболонка спробує примусово створити послідовність, елементи якої складатимуться з однакової кількості цифр, дописавши нуль там, де це потрібно. Якщо вказано літери, вираз буде розгорнуто до кожного символу, який лексикографічно потрапляє у діапазон від x до y, включно, з використанням типової локалі C. Зауважте, що x і y мають належати до одного типу (цілих чисел або літер). Якщо вказано крок, його буде використано як приріст між елементами послідовності. Типовим кроком є 1 або -1, відповідно до взаємного розташування кінців послідовності.
Розгортання у дужках виконується до будь-яких інших розгортань. У результатах буде збережено усі символи, які є спеціальними для інших розгортань. Розгортання є строго текстовим. Bash не виконує жодної синтаксичної обробки контексту розгортання або тексту у фігурних дужках.
Правильно форматоване розгортання у дужках має містити ненейтралізовані початкову і кінцеву фігурні дужки та принаймні одну ненейтралізовану кому або один коректний вираз послідовності. Усі розгортання у дужках із помилковим форматуванням буде оброблено буквально. { або , може бути нейтралізовано символом зворотної похилої риски для запобігання обробці цих символів як частини виразу у дужках. Щоб уникнути конфлікту із розгортанням параметрів, рядок ${ не є прийнятним для розгортання у дужках — він придушує розгортання у дужках, аж до кінцевої }.
Ця конструкція типово використовується як скорочення, якщо загальний префікс рядків, які має бути створено, є довшим, ніж у наведеному вище прикладі:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
Розгортання у дужках сучасних версій є дещо несумісним із давніми версіями sh. Старі версії sh не обробляють початкову або кінцеву фігурні дужки особливим чином, якщо вони є частиною слова, і зберігають їх у виведених даних. Bash у процесі розгортання у дужках вилучає фігурні дужки зі слів. Наприклад, якщо передати sh слово file{1,2}, виведено буде те саме слово. Результатом обробки того самого слова у bash буде file1 file2. Якщо потрібна строга сумісність із sh, запускайте bash із параметром +B або вимкніть розгортання у дужках за допомогою параметра +B команди set (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче).
Розгортання тильди¶
Якщо слово починається з ненейтралізованого символу тильди («~»), усі символи до першого ненейтралізованого символу похилої риски (або усі символи, якщо у слові немає ненейтралізованої похилої риски) вважатимуться тильда-префіксом. Якщо жоден із символів у тильда-префіксі не є нейтралізованим, символи у тильда-префіксі вважатимуться можливою назвою облікового запису. Якщо ця назва облікового запису є порожнім рядком, тильду буде замінено на значення параметра оболонки HOME. Якщо значення HOME не встановлено, тильду буде замінено на адресу домашнього каталогу користувача, від імені якого запущено оболонку. У всіх інших випадках тильда-префікс буде замінено домашнім каталогом, пов'язаним із вказаною назвою облікового запису.
Якщо тильда-префіксом є «~+», тильда-префікс буде замінено на значення змінної оболонки PWD. Якщо тильда-префіксом є «~-», замість нього буде підставлено значення змінної середовища OLDPWD, якщо його встановлено. Якщо символи, які йдуть за тильдою у тильда-префіксі складаються з числа N, із необов'язковим префіксом «+» або «-», тильда-префікс буде замінено на відповідний елемент зі стосу каталогів так, наче він є результатом виконання будованої команди dirs, викликаної із тильда-префіксом як аргументом. Якщо символи після тильди у тильда-префіксі складаються з числа без початкового «+» або «-», буде використано варіант із «+».
Якщо назва облікового запису для входу є некоректною або не вдасться виконати розгортання тильди, слово лишиться незмінним.
В усіх інструкціях із встановленням значення змінної буде виконано перевірку на ненейтралізовані тильда-префікси одразу після : або першого =. Якщо такі префікси буде виявлено, також буде виконано розгортання тильди. Отже, можна використовувати назви файлів з тильдами у командах зі встановленням значень для PATH, MAILPATH та CDPATH — оболонка надасть змінній розгорнуте значення.
Крім того, bash виконує розгортання тильди у словах, які відповідають умовам надання змінним значення (як це описано вище у розділі ПАРАМЕТРИ), коли вони з'являються як аргументи у простих командах. У режимі posix bash цього не робитиме, окрім описаних вище команд оголошення.
Розгортання параметрів¶
Символ «$» впроваджує розгортання параметрів, заміну команд або арифметичні обчислення. Назви параметрів або символів, які слід розгорнути, може бути взято у фігурні дужки, які є необов'язковим, але слугують для захисту змінної від розгортання змінної за символами, які вказано після її назви і які може бути оброблено як частину назви.
Якщо використано фігурні дужки, відповідною завершальною дужкою вважатиметься перша «}», яку не екрановано символом зворотної похилої риски і яка не є частиною нейтралізованого рядка, і не перебуває у вбудованому арифметичному виразі, заміні команди або розгортанні параметра.
- ${параметр}
- Буде підставлено значення параметра. Якщо параметр є позиційним параметром, номер якого складається з декількох цифр, або якщо після параметра вказано символ, який не слід обробляти як частину його назви, слід скористатися фігурними дужками. Параметр має бути параметром оболонки, який описано вище (див. ПАРАМЕТРИ) або посиланням на масив (Масиви).
Якщо першим символом параметра є знак оклику (!) і параметр не належить до типу nameref, він впроваджує рівень опосередкованості. Bash використовує значення, яке сформовано розгортанням решти параметра як новий параметр; далі, розгортає цей параметр і використовує значення у решті розгортання замість розгортання початкового параметра. Цей процес відомий як опосередковане розгортання. Отримане значення підлягає розгортанню тильди, розгортанню параметрів, заміні команд та арифметичним обчисленням. Якщо параметр належить до типу nameref, розгортання дає назву параметра, на який посилається параметр, а не повне опосередковане розгортання. Виключеннями з цього правила є розгортання ${!префікс*} та ${!назва[@]}, які описано нижче. Щоб було впроваджено опосередковане розгортання, після знаку оклику має бути одразу вказано ліву фігурну дужку.
В усіх наведених нижче випадках слово підлягатиме розгортанню тильди, розгортанню параметрів, заміні команд та арифметичним обчисленням.
Якщо не виконуватиметься розгортання підрядків, з використанням документованих нижче форм (наприклад, :-), bash виконує перевірку того, чи є параметр невстановленим або порожнім. Якщо не буде використано двокрапку, виконуватиметься перевірка лише на те, чи є параметр невстановленим.
- ${параметр:-слово}
- Використовувати типові значення. Якщо значення параметра не буде встановлено або воно буде порожнім, буде підставлено розгортання слова. У інших випадках буде підставлено значення параметра.
- ${параметр:=слово}
- Призначити типові значення. Якщо значення параметра не встановлено або його значення є порожнім, для параметра буде встановлено значення слово. Після цього параметр буде замінено на значення параметра. У такий спосіб не можна встановлювати значення для позиційних і спеціальних параметрів.
- ${параметр:?слово}
- Показ помилки, якщо порожній або не встановлено. Якщо параметр має порожнє значення або його значення не встановлено, розгортання слова (або повідомлення щодо цього ефекту, якщо слова немає) буде записано до стандартного потоку помилок, і оболонка, якщо вона не є інтерактивною, завершить роботу. В усіх інших випадках буде підставлено параметр.
- ${параметр:+слово}
- Використати альтернативне значення. Якщо параметр має порожнє значення або значення параметра не встановлено, підставляння не виконуватиметься. В усіх інших випадках буде підставлено розгортання слова.
- ${параметр:відступ}
- ${параметр:відступ:довжина}
- Розгортання
підрядка.
Буде
розгорнуто
до
довжина
символів
значення
параметр,
починаючи
з символу,
який
вказано
значенням
відступ.
Якщо
параметром
є @ або *,
індексований
масив із
підписом @
або * або
назва
асоціативного
масиву,
результат
буде іншим,
описаним
нижче. Якщо
довжину
не вказано,
буде
виконано
розгортання
до
підрядка
значення
параметра,
що
починається
з символу,
вказаного
аргументом
відступ, і
продовжується
до кінця
значення.
Значення
довжина і
відступ є
арифметичними
виразами
(див.
АРИФМЕТИЧНІ
ОБЧИСЛЕННЯ
нижче).
Якщо обчисленим значенням відступу є від'ємне число, значення буде використано як відступ у символах з кінця значення параметра. Якщо обчисленим значенням довжини є від'ємне число, його буде використано як відступ у символах від кінця значення параметра, а не кількість символів, а результатом розгортання будуть символи між значенням відступу і обчисленим значенням довжини. Зауважте, що від'ємний відступ має бути відокремлено від двокрапки принаймні одним пробілом, щоб його не можна було сплутати з розгортанням :-.
Якщо параметром є @ або *, результатом буде довжина позиційних параметрів, починаючи з параметра відступ. Від'ємні значення відступу буде відраховано від значення на одиницю більшого за найбільший позиційний параметр. Отже, відступ -1 визначає останній позиційний параметр. Якщо обчисленим значенням аргументу довжина є від'ємне значення, програма повідомить про помилку розгортання.
Якщо параметром є назва індексованого масиву із підписом @ або *, результатом буде довжина елементів масиву, починаючи з ${параметр[відступ]}. Від'ємні значення аргументу відступ буде відраховано від номера, який на одиницю більший за максимальний індекс у вказаному масиві. Якщо обчисленим значенням аргументу довжина є від'ємне значення, програма повідомить про помилку розгортання.
Застосоване до асоціативного масиву розгортання підрядків дає невизначені результати.
Відлік елементів у підрядках ведеться від нуля, якщо не використано позиційних параметрів. У випадку використання позиційних параметрів, типово, індексування починається з 1. Якщо відступ дорівнює 0 і використано позиційні параметри, до списку буде дописано префікс $0.
- ${!префікс*}
- ${!префікс@}
- Префікс відповідності назв. Буде розгорнуто до назв змінних, чиї назви починаються з префікса. Записи назви буде відокремлено першим символом спеціальної змінної IFS. Якщо використано @ і розгортання відбувається у подвійних лапках, кожну назву змінної буде розгорнуто в окреме слово.
- ${!назва[@]}
- ${!назва[*]}
- Список ключів масиву. Якщо назва є змінною-масивом, буде розгорнуто до списку індексів (ключів) масиву, яким надано значення у масиві назва. Якщо назва не є масивом, буде розгорнуто у 0, якщо значення назва встановлено, і порожнє значення, якщо ні. Якщо використано @ і розгортання відбувається у подвійних лапках, кожен ключ буде розгорнуто до окремого слова.
- ${#параметр}
- Довжина параметра. Буде замінено на довжину значення параметра у символах. Якщо параметром є * або @, буде замінено кількістю позиційних параметрів. Якщо параметром є назва масиву із підписом * або @, буде замінено на кількість елементів у масиві. Якщо параметр є назвою індексованого масиву із підписом — від'ємним числом, це число відраховуватиметься від більшого на одиницю за максимальний індекс параметра числа. Отже від'ємні індекси відраховуються від кінця масиву, а індекс -1 відповідає останньому елементу масиву.
- ${параметр#слово}
- ${параметр##слово}
- Вилучення префікса за взірцем. Слово буде розгорнуто для отримання взірця, як у розгортанні шляхів. Отриманий взірець буде використано для обробки розгорнутого значення параметра з використанням правил, які описано у розділі Відповідність за взірцем нижче. Якщо взірець відповідатиме початку значення параметра, результатом розгортання буде розгорнуте значення параметра, з якого вилучено найкоротший відповідний взірець (випадок «#») або найдовший відповідний взірець (випадок «##»). Якщо параметром є @ або *, дію з вилучення взірця буде застосовано до кожного позиційного параметра послідовно, і результатом розгортання буде список. Якщо параметром є змінна-масив із підписом @ або *, дію з вилучення взірця буде застосовано до кожного елемента масиву послідовно, а результатом розгортання буде отриманий список.
- ${параметр%слово}
- ${параметр%%слово}
- Вилучення суфікса за взірцем. Слово буде розгорнуто для отримання взірця, як у розгортанні шляхів. Отриманий взірець буде використано для обробки розгорнутого значення параметра з використанням правил, які описано у розділі Відповідність за взірцем нижче. Якщо взірець відповідатиме завершенню значення параметра, результатом розгортання буде розгорнуте значення параметра, з якого вилучено найкоротший відповідний взірець (випадок «%») або найдовший відповідний взірець (випадок «%%»). Якщо параметром є @ або *, дію з вилучення взірця буде застосовано до кожного позиційного параметра послідовно, і результатом розгортання буде список. Якщо параметром є змінна-масив із підписом @ або *, дію з вилучення взірця буде застосовано до кожного елемента масиву послідовно, а результатом розгортання буде отриманий список.
- ${параметр/взірець/рядок}
- ${параметр//взірець/рядок}
- ${параметр/#взірець/рядок}
- ${параметр/%взірець/рядок}
- Заміна за
взірцем.
Взірець
буде
розгорнуто
у взірець,
як у
розгортанні
шляхів.
Буде
розгорнуто
параметр
і замінено
найдовший
відповідник
взірця у
значенні
на рядок.
Аргумент
рядок
підлягає
розгортанню
тильди,
розгортанню
параметрів
та змінних,
арифметичним
обчисленням,
підставлянню
команд і
процесів
та
вилученню
лапок.
Відповідність
буде
встановлено
за
правилами,
які
описано у
розділі
Відповідність
за
взірцем
нижче. У
першій
формі вище
буде
замінено
лише
перший
відповідник.
Якщо
параметр
і взірець
відокремлено
двома
символами
похилої
риски
(друга
форма вище,
усі
відповідники
взірця
буде
замінено
на рядок.
Якщо
взірець
починається
з # (третя
форма
вище),
відповідність
має бути
встановлено
з початком
розгорнутого
значення
параметра.
Якщо
взірець
починається
з %
(четверта
форма
вище),
відповідність
має бути
встановлено
наприкінці
розгорнутого
значення
параметра.
Якщо
розгортанням
рядка є
порожнє
значення,
відповідники
взірця
буде
вилучено.
Якщо
рядок є
порожнім,
відповідники
взірця
буде
вилучено, і
/ після
взірця
можна
пропустити.
Якщо увімкнено параметр оболонки patsub_replacement за допомогою shopt, усі екземпляри & у рядку рядок буде замінено відповідною частиною взірця.
Взяття у лапки будь-якої частини рядка забороняє заміну у розгортанні взятої у лапки частини, включно із заміною рядків, що зберігаються у змінних оболонки. Символ зворотної похилої риски екранує & у рядку; символ зворотної похилої риски буде вилучено для уможливлення використання самого символу & у рядку заміннику. Також символом зворотної похилої риски можна скористатися для екранування символу зворотної похилої риски; використання \\ дає сам символ зворотної похилої риски у заміні. Користувачам слід подбати про подвійне взяття у лапки рядка, щоб уникнути небажаного конфлікту між екрануванням символом зворотної похилої риски і взяття у подвійні лапки, оскільки символ зворотної похилої риски має спеціальне значення у подвійних лапках. Засіб підставляння за взірцем виконує перевірку на & поза лапками після розгортання рядка; програмісти для коду оболонки мають брати у лапки усі &, які має бути використано буквально у заміннику і використати поза лапками усі екземпляри &, які має бути замінено.
Якщо увімкнено параметр оболонки nocasematch, відповідність буде встановлено без врахування регістру літерних символів. Якщо параметром є @ або *, дію з підставляння буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію з підставляння буде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
- ${параметр^взірець}
- ${параметр^^взірець}
- ${параметр,взірець}
- ${параметр,,взірець}
- Зміна регістру. Це розгортання змінює регістр абеткових символів у параметрі. Взірець буде розгорнуто до взірця, як у розгортанні шляхів. Кожен із символів у розгорнутому значенні параметра буде порівняно із взірцем і, якщо він відповідає взірцю, його регістр буде змінено. Взірець має описувати точно один символ. Оператор ^ призведе до перетворення літер нижнього регістру, які відповідають взірцю, на літери верхнього регістру; оператор , призведе до перетворення відповідних літери верхнього регістру на літери нижнього регістру. Розгортання ^^ і ,, призведуть до перетворення усіх відповідних символів у розгорнутому значення; розгортання ^ і , призведуть до перетворення лише першого символу у розгорнутому значенні. Якщо взірець вказано не буде, замість нього буде використано ?, тобто взірець довільного символу. Якщо параметром є @ або *, дію зі зміни регістру буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію зі зміни регістру буде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
- ${параметр@оператор}
- Перетворення параметрів. Розгортанням буде або перетворення значення параметра або відомості щодо самого параметра, залежно від значення оператора. Усі оператори складаються з однієї літери:
- U
- Результатом розгортання є рядок, який є значенням параметра, у якому літери нижнього регістру (малі) замінено на відповідні їм літери верхнього регістру (великі).
- u
- Результатом розгортання є рядок, який є значенням параметра, у якому перший символ буде замінено на відповідну літеру верхнього регістру (велику), якщо перший символ є літерою.
- L
- Результатом розгортання є рядок, який є значенням параметра, у якому літери верхнього регістру (великі) замінено на відповідні їм літери нижнього регістру (малі).
- Q
- Результатом розгортання є рядок, який є значенням параметра, у якому вміст нейтралізовано до формату, який можна використати як вхідні дані.
- E
- Результатом розгортання є рядок, який є значенням параметра, у якому екрановані послідовності із символом зворотної похилої риски буде розгорнуто так, як у механізмі нейтралізації $'...'.
- P
- Результатом розгортання є рядок, який є розгортанням параметра у такий спосіб, наче він є рядком запиту (див. ЗАПИТИ нижче).
- A
- Розгортанням є рядок у формі інструкції зі встановлення значення або команди declare, яка, якщо її виконати, повторно створить параметр з його атрибутами і значенням.
- K
- Дає, можливо, нейтралізовану версію значення параметра, але виводить значення індексованих або асоціативних масивів як послідовність нейтралізованих пар ключ-значення (див. Масиви вище).
- a
- Розгортанням буде рядок, що складається зі значень прапорців, що відповідають атрибутам параметра.
- k
- Подібне до K-перетворення, але розгортає ключі і значення індексованих і асоціативних масивів в окремі слова після поділу на слова.
Якщо параметром є @ або *, дію буде застосовано до кожного позиційного параметра послідовно, а результатом розгортання буде оброблений список. Якщо параметром є змінна-масив із підписом @ або *, дію буде застосовано до кожного елемента у масиві послідовно, а результатом розгортання буде оброблений список.
Результат розгортання розгортання буде поділено на слова і застосовано до нього розгортання шляхів у описаний нижче спосіб.
Заміна команд¶
Заміна команд уможливлює заміну назви команди на результат її виконання. Передбачено дві форми:
$(команда)
Bash виконує розгортання, виконавши команду у середовищі підоболонки і замінивши команду на стандартне виведення команди із вилученням усіх кінцевих символів нового рядка. Вбудовані нові рядки не буде вилучено, але їх може бути вилучено під час поділу на слова. Заміну команди $(cat файл) може бути замінено еквівалентним, але швидшим, $(< файл).
Якщо використано стару форму заміни із використанням зворотного апострофа, зворотний апостроф зберігає своє буквальне значення, якщо після нього не вказано $, ` або \. Перший зворотний апостроф, перед яким немає символу зворотної похилої риски, завершує заміну команди. Якщо використано форму $(команда), усі символи у дужках складають команду; жоден з цих символів не підлягатиме особливій обробці.
Заміна команд може бути вкладеною. Для створення вкладеності у формі зі зворотним апострофом екрануйте внутрішні зворотні апострофи символами зворотних похилих рисок.
Якщо заміну взято у подвійні лапки, до результатів не буде застосовано поділ на слова та розгортання шляхів.
Арифметичні обчислення¶
За допомогою арифметичних обчислень можна визначати значення арифметичного виразу і підставляти до команди результат. Формат арифметичних обчислень є таким:
$((вираз))
Старий формат $[вираз] вважається застарілим. Його буде вилучено у майбутніх версіях bash.
Вираз підлягає тим самим розгортанням, що і вираз, якщо його взято у подвійні лапки, але подвійні лапки у дужках не оброблятимуться якимось спеціальним чином і просто вилучатимуться. Усі елементи у виразі підлягатимуть розгортанню параметрів та змінних, заміні команд та вилученню нейтралізації. Результат буде оброблено як арифметичний вираз для обчислення. Арифметичні обчислення можуть бути вкладеними.
Обчислення буде виконано відповідно до наведених нижче у розділі АРИФМЕТИЧНІ ОБЧИСЛЕННЯ правил. Якщо вираз є некоректним, bash виведе повідомлення, що вказуватиме на помилку і не виконуватиме підставляння результату обчислень.
Заміна процесу¶
За допомогою заміни процесів можна посилатися на вхідні і вихідні канали процесів, як на назви файлів. Заміну процесів записують у формі <(список) або >(список). Список процесів буде запущено асинхронно, а якого вхідний і вихідний канали стануть доступними через назву файла. У результаті заміни, цю назву файла буде передано як аргумент поточній команді. Якщо використано форму >(список), запис до файла буде вхідним каналом для списку. Якщо використано форму <(список), слід буде виконати читання файла, переданого як аргумент, щоб отримати доступ до вихідного каналу списку. Підтримку заміни процесу передбачено у системах, у яких є підтримка іменованих каналів (FIFO) або методу /dev/fd іменування відкритих файлів.
Коли можливо, заміна процесу виконується одночасно з розгортанням параметрів і змінних, заміною команд та арифметичними обчисленнями.
Поділ на слова¶
Оболонка сканує результати розгортання параметрів, заміни команд і арифметичних обчислень, які не було виконано всередині подвійних лапок для поділу на слова.
Оболонка вважає кожен символ IFS роздільником і ділить результати інших розгортань на слова із використанням цих символів як меж полів. Якщо значення IFS не встановлено, або його значенням є точно <space><tab><newline>, типове значення, послідовності <space>, <tab> і <newline> на початку або наприкінці результатів попередніх розгортань буде проігноровано, а будь-які послідовності символів IFS не на початку і не у кінці будуть слугувати як межі слів. Якщо IFS має нетипове значення, послідовності символів-пропусків space, tab і newline буде проігноровано на початку і наприкінці слова, якщо символ пропуску є у значенні IFS (символ-пропуск IFS). Будь-який символ в IFS, який не є пропуском IFS, разом із будь-якими сусідніми символами-пропусками IFS, відмежовує поле. Послідовність символів-пропусків IFS також вважатиметься межею. Якщо значення IFS є порожнім, поділ на слова не відбуватиметься.
Явні порожні аргументи ("" or '') буде збережено і передано команди як порожні рядки. Ненейтралізовані неявні порожні аргументи, які є результатом розгортання параметрів, які не мають значень, буде вилучено. Якщо параметр без значення буде розгорнуто у подвійних лапках, буде отримано порожній аргумент; його буде збережено і передано команді як порожній рядок. Якщо нейтралізований порожній аргумент буде частиною слова, чиє розгортання не є порожнім, порожній аргумент буде вилучено. Таким чином, слово -d'' дасть -d після поділу на слова і вилучення порожніх аргументів.
Зауважте, що якщо розгортання не відбуватиметься, поділ на слова також не відбуватиметься.
Розгортання шляхів¶
Після поділу на слова, якщо не встановлено параметра -f, bash виконує пошук у кожному зі слів символів *, ? і [. Якщо буде виявлено один із цих символів, і його не нейтралізовано, слово вважатиметься взірцем — його буде замінено на упорядкований за абеткою список назв файлів, які відповідають взірцю (див. Відповідність за взірцем нижче). Якщо відповідних назв файлів знайдено не буде, і не увімкнено параметр оболонки nullglob, слово буде вставлено до команди без змін. Якщо встановлено параметр nullglob, і не знайдено жодного відповідника, слово буде вилучено. Якщо встановлено параметр failglob, і не знайдено відповідників, буде виведено повідомлення про помилку, а команду не буде виконано. Якщо увімкнено параметр оболонки nocaseglob, відповідність встановлюватиметься без врахування регістру абеткових символів. Зауважте, що при використанні діапазонних виразів, подібних до [a-z], (див. нижче), може бути включено літери іншого регістру, залежно від значення LC_COLLATE. Якщо взірець використано для розгортання шляхів, символ на початку “.” назви або одразу після символу похилої риски має відповідати рядку явно, якщо не встановлено параметр оболонки dotglob. Щоб було встановлено відповідність назвам файлів “.” і “..”, взірець має починатися з “.” (приклад: “.?”), навіть якщо встановлено dotglob. Якщо увімкнено параметр оболонки globskipdots, відповідність назвам файлів “.” і “..” не встановлюватиметься ніколи, навіть якщо взірець починається з “.”. Якщо відповідність встановлюється не для шляхів, особливої обробки “.” не відбувається. При встановленні відповідності шляхів символ похилої риски має бути відповідним явним чином похилій рисці у взірці, але в інших контекстах відповідності він може бути відповідним спеціальним символом взірця, як описано нижче у розділі Відповідність за взірцем. Див. опис shopt нижче у розділі ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ, щоб ознайомитися із описом параметрів оболонки nocaseglob, nullglob, globskipdots, failglob і dotglob.
Для обмеження набору назв файлів, які відповідають взірцю, можна скористатися змінною оболонки GLOBIGNORE. Якщо встановлено змінну GLOBIGNORE, усі відповідні назви файлів, які також відповідають одному із взірців у GLOBIGNORE буде вилучено зі списку відповідників. Якщо встановлено параметр nocaseglob, відповідність взірцям у GLOBIGNORE встановлюватиметься без врахування регістру символів. Назви файлів “.” і “..” буде завжди проігноровано, якщо встановлено непорожнє значення GLOBIGNORE. Втім, встановлення непорожнього значення GLOBIGNORE призведе до вмикання параметри оболонки dotglob, отже, відповідними вважатимуться усі інші назви файлів, що починаються з “.”. Щоб отримати стару поведінку з ігноруванням назв файлів, що починаються з “.”, зробіть “.*” одним із взірців у GLOBIGNORE. Параметр dotglob буде вимкнено, якщо не встановлено значення GLOBIGNORE. При встановленні відповідності взірцю буде взято до уваги значення параметра оболонки extglob.
Відповідність за взірцем
Будь-який символ, який з’являється у взірці, окрім спеціальних символів взірця, описаних нижче, збігається сам із собою. Символ NUL може не зустрічатися у взірці. Зворотна похила риска екранує наступний символ; при збігу зворотна похила риска відкидається. Спеціальні символи взірця слід уводити в лапках, якщо вони мають відповідати буквально.
Спеціальні символи взірців мають таке значення:
- *
- Збігається з будь-яким рядком, включаючи нульовий (null) рядок. Якщо увімкнено параметр оболонки globstar і в контексті розширення назви шляху використовується *, дві * поруч, використані як єдиний взірець, відповідатимуть усім файлам і нулю або більше каталогів і підкаталогів. Якщо далі йде /, дві * поруч відповідатимуть лише каталогам і підкаталогам.
- ?
- Відповідає будь-якому одинарному символу.
- [...]
- Відповідає
будь-якому
зі
вкладених
символів.
Пара
символів,
розділених
дефісом,
позначає
вираз
діапазону;
відповідає
будь-якому
символу, що
міститься
між цими
двома
символами
включно, з
використанням
послідовності
порівняння
поточної
локалі та
набору
символів.
Якщо
першим
після [ є
символ !
або ^, то
відповідає
будь-якому
не
вкладеному
символу.
Порядок
сортування
символів у
виразі
діапазону
і символах,
включених
до
діапазону,
визначається
поточним
мовним
стандартом
і
значеннями
змінних
оболонки
LC_COLLATE або
LC_ALL, якщо
їх
встановлено.
Для
отримання
традиційної
інтерпретації
виразів
діапазону,
де [a-d]
еквівалентне
[abcd],
встановіть
для
змінної
оболонки
LC_ALL
значення C,
або
увімкніть
параметр
оболонки
globasciiranges. - можна
увідповіднити,
включивши
його в
набір як
перший або
останній
символ. ]
можна
увідповіднити,
включивши
в набір як
перший
символ.
Між [ і ] можна вказувати класи символів у формі такої синтаксичної конструкції: [:клас:], де клас є одним із вказаних нижче класів, які визначено у стандарті POSIX:
Клас символів відповідає будь-якому символу, що належить класу. Клас символів word відповідає літерам, цифрам та символам _.
Між [ і ] можна задати клас еквівалентності, скориставшись синтаксисом [=c=], який відповідає всім символам з такою ж вагою зіставлення (як визначено поточним мовним стандартом), що й символ c.
Між [ і ], синтаксису [.символ.] відповідає символ зіставлення символ.
Якщо параметр оболонки extglob увімкнено за допомогою вбудованої команди shopt, оболонка розпізнає кілька розширених операторів відповідності взірцю. В подальшому описі список_взірців - це список із одного або кількох взірців, розділених символом |. Складені взірці можна сформувати за допомогою одного або кількох із таких підвзірців:
- ?(список_взірвців)
- Відповідає нульовій або одинарній кількості відповідників вказаних взірців
- *(список_взірвців)
- Відповідає нулю, одному або декільком збігам із заданим взірцем
- +(список_взірців)
- Відповідає одному або декільком збігам із заданим взірцем
- @(списо_взірців)
- Відповідає одному з заданих взірців
- !(список_взірців)
- Відповідає усьому, окрім одного з заданих взірців
Параметр extglob змінює поведінку обробника, оскільки зазвичай дужки вважаються операторами із синтаксичним значенням. Щоб розширені взірці відповідності було оброблено належним чином, слід увімкнути extglob до обробки конструкцій, що містять ці взірці, включно із функціями оболонки та підставлянням команд.
При встановленні відповідності назв файлів параметр оболонки dotglob визначає набір назв файлів, перевірку яких слід виконати: якщо увімкнено dotglob, набір назв файлів включає усі файли, назви яких починаються з “.”, але “.” і “..” слід шукати за взірцем або підвзірцем, що починається з крапки; якщо його вимкнено, набір не включатиме жодних назв файлів, які починаються з “.”, якщо взірець або підвзірець не починається з “.”. Як і вище, “.” має особливе призначення при встановленні відповідності назв файлів.
Зіставлення складних розширених взірців із довгими рядками виконується повільно, особливо коли взірці містять чергування, а рядки містять кілька збігів. Використання окремих збігів для коротших рядків або використання масивів рядків замість одного довгого рядка може бути швидшим.
Вилучення лапок¶
Після попередніх розгортань усі ненейтралізовані послідовності символів \, ' і ", які не були результатом вказаних вище розгортань, буде вилучено.
ПЕРЕСПРЯМОВУВАННЯ¶
Перш ніж команду буде виконано, її вхід і вихід може бути переспрямовано за допомогою спеціальних позначень, які обробляє оболонка. За допомогою переспрямувань можна дублювати, відкривати, закривати, замінювати на посилання на інші файли дескриптори файлів команди, а також змінювати файли, з яких програма читатиме дані і до яких вона записуватиме дані. Також переспрямуваннями можна скористатися для внесення змін до дескрипторів файлів у поточному середовищі виконання оболонки. Описані нижче оператори переспрямовування можуть передувати простій команді, бути розташованими у ній або слідувати за командою. Переспрямування буде оброблено у вказаному у команді порядку, зліва праворуч.
Перед кожним переспрямуванням, перед яким можна вказати номер дескриптора файла, можна також вказати слово у формі {назва-змінної}. У таких випадках, для кожного оператора переспрямування, окрім >&- і <&-, оболонка розмістить у пам'яті дескриптор файла із номером, що перевищує 9, і встановить для нього значення назва-змінної. Якщо перед >&- або <&- буде вказано {назва-змінної}, значення назва-змінної визначить дескриптор файла, який слід закрити. Якщо вказано аргумент {назва-змінної}, переспрямування працюватиме за областю дії команди, що надає змогу програмісту оболонки керувати самим дескриптором файла вручну. Цією поведінкою керує параметр оболонки 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, слід користуватися із обережністю, оскільки вони можуть конфліктувати із дескрипторами, які оболонка використовує на внутрішньому рівні.
Зауважте, що вбудована команда exec може переспрямовувати дані у поточній оболонці.
Переспрямування введення¶
Переспрямування вхідних даних призведе до того, що файл, назва якого є результатом розгортання слова, буде відкрито для читання на дескрипторі файла n або на стандартному введенні (файла з дескриптором 0), якщо n не вказано.
Загальний формат для переспрямування вводу такий:
[n]<слово
Переспрямування виведення¶
Переспрямування виведених даних призведе до того, що файл, назва якого є результатом розгортання слова, буде відкрито для читання на дескрипторі файла n або на стандартному виведенні (файла з дескриптором 1), якщо n не вказано. Якщо файла не існує, його буде створено; якщо він існує, його буде обрізано до нульового розміру.
Загальний формат для переспрямування виводу такий:
[n]>слово
Якщо оператором переспрямування є > і було увімкнено параметр noclobber вбудованої команди set, спроба переспрямовування завершиться помилкою, якщо файл, назву якого буде визначено шляхом розгортання слова, існує і є звичайним файлом. Якщо оператором переспрямування є >| або оператором переспрямування є > і не увімкнено параметр noclobber у вбудованій команді set, буде виконано спробу пересрямовування, навіть якщо файл із назвою, яку отримано розгортанням слова, існує.
Дописування переспрямованого виведення¶
Переспрямування виведення у цей спосіб призведе до того, що файл, назва якого є результатом розгортання слова, буде відкрито для дописування на дескрипторі файла n або на стандартному виведенні (файла з дескриптором 1), якщо n не вказано. Якщо файла не існує, його буде створено.
Загальним форматом для дописування виведення є такий:
[n]>>слово
Переспрямування стандартного виводу та стандартних помилок¶
Ця конструкція уможливлює переспрямовування і стандартного виведення (дескриптор файла 1), і стандартного виведення помилок (дескриптор файла 2) до файла, чиєю назвою є розгортання слова слово.
Існує два формати переспрямування стандартного виводу та стандартних помилок:
&>слово
З двох форм пріоритетною є перша. Семантично це еквівалентно до
>слово 2>&1
Якщо використано другу форму, слово не зможе розгорнутися до числа або -. Якщо воно розгортається, з міркувань сумісності застосовуються інші оператори переспрямовування (див. Дублювання дескрипторів файлів).
Дописування стандартного виводу та стандартних помилок¶
Ця конструкція уможливлює дописування і стандартного виведення (дескриптор файла 1), і стандартного виведення помилок (дескриптор файла 2) до файла, чиєю назвою є розгортання слова слово.
Форматуванням для дописування стандартного виведення і стандартного виведення помилок є таке форматування:
&>>слово
Семантично це еквівалентно до
>>слово 2>&1
(див. Дублювання дескрипторів файлів нижче).
Контекстні документи¶
Цей тип переспрямовування вказує оболонці, що слід прочитати вхідні дані з поточного джерела, аж до рядка, що містить лише роздільник (без кінцевих пропусків). Згодом, як стандартне джерело вхідних даних (або дескриптор файла n, якщо вказано n) для команди буде використано усі рядки аж до цієї позиції.
Формат контекстних документів:
[n]<<[-]слово
контекстний документ роздільник
У слові слово не буде виконано розгортання параметрів і змінних, заміни команд, арифметичних обчислень та розгортання шляхів. Якщо якусь частину слова слово взято у лапки, роздільником буде результат вилучення лапок зі слова, а рядки контекстного документа не розгортатимуться. Якщо слово не буде взято у лапки, в усіх рядках контекстного документа виконуватиметься розгортання параметрів, заміни команд та арифметичні обчислення, послідовність символів \<новий рядок> буде проігноровано, а для нейтралізації символів \, $ і ` слід використовувати \.
Якщо оператором переспрямовування є <<-, з вхідних рядків буде прибрано початкові табуляції та рядки, що містять роздільник. Це уможливлює належні відступи у рядках контекстного документа у скриптах оболонки.
Контекстні рядки¶
Варіант контекстних документів. Форматування:
[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 variables). Зазвичай змінні та їх значення спільні між функцією та її викликачем. Якщо змінну було оголошено як local, область видимості змінної буде обмежено відповідною функцією та її дочірніми (включно із функціями, які вона викликає).
У наведеному нижче описі поточною областю видимості є функція, виконання якої відбувається у поточний момент часу. Попередні області видимості складаються з функції, з якої викликано цю функцію, та попередніх функцій у стосі викликів, аж до «загальної» області видимості, де оболонка не виконує жодної функції оболонки. Далі, локальною змінною у поточній області видимості є змінна, яку оголошено за допомогою вбудованих команд local або declare у функції, виконання якої відбувається у поточний момент.
Локальні змінні «затіняють» змінні із тими самими назвами, які оголошено у попередніх областях видимості. Наприклад, локальна змінна, яку оголошено у функції, приховує загальну змінну із тією самою назвою: посилання та встановлення значень стосуватимуться локальної змінної, а загальна змінна лишиться незмінною. При поверненні з функції загальна змінна знову стає видимою.
Оболонка використовує динамічне визначення областей видимості для керування видимістю змінних у функціях. При динамічному визначенні перелік видимих змінних та їхні значення є результатом послідовності викликів функцій, яка спричинила досягнення у процесі виконання поточної функції. Значення змінної, яке бачить функція, залежить від її значення у місці виклику, якщо таке визначено, того, перебуває місце виклику у «загальній» області видимості чи у іншій функції оболонки. Також, це значення, яке «затіняє» локальне оголошення змінної, і значення, яке відновлено при поверненні з функції.
Наприклад, якщо змінну змінна оголошено як локальну у функції функція1, і функція функція1 викликає іншу функцію функція2, посилання на змінна, які використано у функція2, дадуть локальну змінну змінна з функція1, яка затіняє будь-яку загальну змінну із назвою змінна.
Вбудована команда unset також працює з використанням тієї самої динамічної області видимості: якщо змінна є локальною для поточної області видимості, unset скасує встановлення значення для неї; якщо ж ні, скасування значення стосуватиметься змінної, яку виявлено у будь-якій області видимості, звідки викликано функцію, як це описано вище. Якщо значення змінної у поточній локальній області видимості не встановлено, нічого не зміниться (виглядатиме як невстановлена), аж доки значення у відповідній області видимості не буде встановлено або не буде виконано повернення з функції. Щойно буде виконано повернення з функції, будь-який екземпляр змінної у попередній області видимості стане видимим. Якщо скасування встановлення значення спрацює для змінної у попередній області видимості, будь-який екземпляр змінної із тією самою назвою, який було затінено, стане знову видимим (див. нижче щодо того, як змінна оболонки localvar_unset змінює цю поведінку).
Змінна FUNCNEST, якщо встановлено числове додатне значення, визначає максимальний рівень вкладеності функцій. Виклики функцій, у яких перевищено обмеження, призводять до аварійного завершення виконання усієї команди.
Якщо у функції буде виконано вбудовану команду return, виконання функції буде завершено і оболонка перейде до виконання наступної після виклику функції команди. Перед поновленням виконання буде виконано усі команди, які пов'язано із пасткою RETURN. Під час завершення роботи функції буде відновлено значення, які мали перед виконанням функції усі позиційні параметри та особливий параметр #.
Отримати список назв і визначень функцій можна за допомогою параметра -f вбудованих команд declare і typeset. Використання параметра -F вбудованих команд declare і typeset призведе до виведення списку лише назв функцій (і, необов'язково, файла-джерела та номера рядка, якщо увімкнено параметр оболонки extdebug). Функції можна експортувати так, щоб їх було автоматично визначено у дочірніх процесах оболонки (процесах, які створено під час виконання окремих викликів оболонки), — скористайтеся параметром -f вбудованої команди export. Визначення функції можна вилучити за допомогою параметра -f вбудованої команди unset.
Функції можуть бути рекурсивними. Для обмеження глибини стека викликів функції та кількості викликів функцій можна скористатися змінною FUNCNEST. Типово, обмежень на кількість рекурсивних викликів не накладається.
АРИФМЕТИЧНЕ ОЦІНЮВАННЯ¶
Оболонка, за певних умов, уможливлює арифметичні обчислення (див. вбудовані команди let і declare, складену команду (( та Арифметичні обчислення). Обчислення буде виконано у цілих числах із фіксованою шириною без перевірок на переповнення, хоча ділення на 0 буде перехоплено із повідомленням про помилку. Оператори, їхня пріоритетність, асоціативність та значення є тими самими, що і у мові C. Нижче наведено список операторів, які згруповано за рівнями рівної пріоритетності. Рівні у списку впорядковано за спаданням пріоритетності.
- id++ id--
- післяінкремент і післядекремент змінної
- - +
- унарні мінус та плюс
- ++ідентифікатор --ідентифікатор
- доінкремент та додекремент змінної
- ! ~
- логічне та порозрядне заперечення
- **
- піднесення до степеня
- * / %
- множення, ділення, залишок ділення
- + -
- додавання, віднімання
- << >>
- лівий та правий порозрядний зсув
- <= >= < >
- порівняння
- == !=
- рівність та нерівність
- &
- бітова «І»
- ^
- порозрядне виключне АБО
- |
- бітове «АБО»
- &&
- логічне «І»
- ||
- логічне «АБО»
- expr?expr:expr
- умовний оператор
- = *= /= %= += -= <<= >>= &= ^= |=
- присвоювання
- expr1 , expr2
- кома
Змінні оболонки можна використовувати як операнди; буде виконано розгортання параметрів до обчислення виразу. У виразі на змінні оболонки можна посилатися за назвою без використання синтаксису розгортання параметрів. Обчисленим значенням змінної оболонки, яка є порожньою або не встановленою, вважатиметься 0 при посиланні за назвою без використання синтаксису розгортання параметрів. Значення змінної буде обчислено як арифметичний вираз при посиланні на неї, або коли змінній, якій було надано атрибут integer за допомогою declare -i буде надано значення. Порожнє значення відповідає 0. Для використання у виразі для змінної оболонки не обов'язково має бути увімкнено атрибут integer.
Цілі сталі має бути визначено з використанням синтаксису визначення мови C без суфіксів або символьних сталих. Сталі з початковим 0 буде оброблено як вісімкові числа. Початковий рядок 0x або 0X позначає шістнадцяткове число. У всіх інших випадках, числа записують у формі [основа#]n, де необов'язковою частиною основа є десяткове число від 2 до 64, яке означає основу числення, а n — число у цій основі числення. Якщо рядок основа# не вказано, буде використано основу числення 10. При заданні n, якщо треба використати цифри, які не є десятковими, цифри після 9 слід вказувати як малі літери, великі літери, @ і _, саме у такому порядку. Якщо основа є числом, яке менше або рівне 36, можна використовувати як малі, так і великі літери для позначення цифр зі значеннями від 10 до 35.
Виконання операторів відбувається за пріоритетністю. Підвирази у дужках буде обчислено першими. Виразами у дужках можна скористатися для зміни описаних вище правил пріоритетності.
УМОВНІ ВИРАЗИ¶
Умовні вирази використовують у складених командах [[ та вбудованих командах test і [ для перевірки атрибутів файла і виконання рядкових і арифметичних порівнянь. Поведінка команд test і [ визначається кількістю їхніх аргументів; див. опис цих команд, щоб дізнатися про інші, специфічні для них, дії.
Вирази формуються з наведених нижче унарних або бінарних базових частин. Якщо у виразах використано декілька назв файлів, bash оброблятиме їх за особливими правилами. Якщо в операційній системі, у якій запущено bash передбачено існування вказаних нижче особливих файлів, bash використає їх; в усіх інших випадках, програма емулюватиме ці файли на внутрішньому рівні за такими правилами: якщо якийсь з аргументів файл однієї з базових частин записано у формі /dev/fd/n, буде перевірено файл із дескриптором n; якщо якийсь з аргументів файл однієї з базових частин є одним з рядків /dev/stdin, /dev/stdout або /dev/stderr, буде перевірено файли із дескрипторами 0, 1 або 2, відповідно.
Якщо про це окремо не зауважено, у базових частинах, які працюють з файлами, буде виконано перехід за символічними посиланнями та оброблено файл, на який виконано посилання, а не саме посилання.
Якщо використано [[, оператори < і > лексикографічно упорядковуватимуться з використанням порядку поточної локалі. Команда test упорядковує за порядком символів в ASCII.
- -a файл
- Істина, якщо файл існує.
- -b файл
- Істина, якщо файл існує і є спеціальним блоковим файлом.
- -c файл
- Істина, якщо файл існує і є спеціальним символьним файлом.
- -d файл
- Істина, якщо файл існує і є каталогом.
- -e файл
- Істина, якщо файл існує.
- -f файл
- Істина, якщо файл існує і є звичайним файлом.
- -g файл
- Істина, якщо файл існує і має встановленим біт групи.
- -h файл
- Істина, якщо файл існує і є символічною ланкою.
- -k файл
- Істина, якщо файл існує і має встановленим «липкий» біт.
- -p файл
-
Істина, якщо файл існує і є іменованим каналом (FIFO). - -r файл
- Істина, якщо файл існує і є придатним до читання.
- -s файл
- Істина, якщо файл існує і має ненульовий розмір.
- -t дескриптор_файла
- Істина, якщо дескриптор файлу дескриптор_файла відкритий і вказує на термінал.
- -u файл
- Істина, якщо файл існує і має встановленим біт встановити-ІД-користувача.
- -w файл
- Істина, якщо файл існує і в нього можна писати.
- -x файл
- Істина, якщо файл існує і є виконуваним.
- -G файл
- Істина, якщо файл існує і його власником є чинний ІД групи.
- -L файл
- Істина, якщо файл існує і є символічною ланкою.
- -N файл
- Істина, якщо файл існує та був змінений після останнього читання.
- -O файл
- Істина, якщо файл існує і його власником є чинний ІД користувача.
- -S файл
- Істина, якщо файл існує і є сокетом.
- файл1 -ef файл2
- Істина, якщо файл1 і файл2 є посиланнями на той самий пристрій або номер inode.
- файл1 -nt файл2
- Істина, якщо файл1 є новішим (за даною внесених змін) за файл2, або якщо файл1 існує, а файл2 — ні.
- файл1 -ot файл2
- Істина, якщо файл1 є старішим за файл2, або якщо файл2 існує, а файл — ні.
- -o назва_параметра
- Істина, якщо увімкнено параметр оболонки назва_параметра. Див. список параметрів під описом параметра -o вбудованої команди set нижче.
- -v назва змінної
- Істина, якщо змінну оболонки назва_змінної встановлено (їй надано значення).
- -R назва_змінної
- Істина, якщо змінну оболонки назва_змінної встановлено і вона є посиланням на назву.
- -z рядок
- Істина, якщо довжина рядка рядок є нульовою.
- рядок
- -n рядок
- Істина, якщо довжина рядка рядок є ненульовою.
- рядок1 == рядок2
- рядок1 = рядок2
- Істина, якщо рядки є однаковими. Для сумісності із POSIX слід використовувати = у команді test. Якщо використано із командою [[, буде виконано встановлення відповідності взірцю, як це описано вище (складені команди).
- рядок1 != рядок2
- Істина, якщо рядки не є рівними.
- рядок1 < рядок2
- Істина, якщо рядок1 стоїть вище за рядок2 при лексикографічному упорядковуванні.
- рядок1 > рядок2
- Істина, якщо рядок1 стоїть нижче за рядок2 при лексикографічному упорядковуванні.
- аргумент1 OP аргумент2
- OP є одним із таких операторів: -eq, -ne, -lt, -le, -gt або -ge. Ці арифметичні бінарні оператори повертаю значення «істина», якщо аргумент1 є рівним, не рівним, меншим, меншим або рівним, більшим або більшим або рівним за аргумент2, відповідно. Аргумент1 і аргумент2 мають бути додатними або від'ємними цілими числами. При використанні у команді [[, аргумент1 і аргумент2 буде обчислено як арифметичні вираз (див. АРИФМЕТИЧНІ ОБЧИСЛЕННЯ вище).
РОЗГОРТАННЯ ПРОСТИХ КОМАНД¶
При виконання простих команд оболонка виконує вказані нижче розгортання, встановлення значень та переспрямування, зліва праворуч, у вказаному нижче порядку.
- 1.
- Слова, які обробник позначив як надання змінним значень (які передують назві команди), і переспрямування буде збережено для подальшої обробки.
- 2.
- Слова, які не є встановленнями значень змінних або переспрямуваннями буде розгорнуто. Якщо після розгортання лишаться якісь слова, перше слово вважатиметься назвою команди, а решта слів — її аргументами.
- 3.
- Переспрямовування виконуватиметься так, як це описано вище у розділі ПЕРЕСПРЯМУВАННЯ.
- 4.
- Текст після = у всіх встановленнях значень змінної підлягає розгортанню тильди, розгортанню параметрів, заміні команд, арифметичним обчисленням та вилученню нейтралізації, перш ніж його буде призначено до зміннної.
Якщо назви команди не отримано, присвоєння значень змінним впливають на поточне середовище оболонки. У випадку такої команди (яка складається лише з інструкцій надання значення та переспрямувань), інструкції з надання значень буде виконано перед переспрямуваннями. В іншому випадку змінні додаються до середовища виконуваної команди і не впливають на поточне середовище оболонки. Якщо будь-яке з присвоєнь намагається присвоїти значення змінній лише для читання, виникає помилка, і команда завершується із ненульовим станом.
Якщо назви команди не отримано, перенаправлення виконуються, але не впливають на поточне середовище оболонки. Помилка переспрямування призводить до завершення команди з ненульовим станом.
Якщо після розширення залишилася назва команди, виконання продовжується, як описано нижче. В іншому випадку команда завершується. Якщо одне з розширень містило заміну команди, стан виходу команди такий, як стан виходу останньої виконаної заміни команди. Якщо заміни команд не було, команда виходить зі станом нуль.
ВИКОНАННЯ КОМАНД¶
Після поділу команди на слова, якщо результат є простою командою і необов'язковим списком аргументів, буде виконано описані нижче дії.
Якщо назва команди не містить похилих рисок, оболонка намагається знайти її. Якщо існує функція оболонки з такою назвою, ця функція викликається, як описано вище в ФУНКЦІЇ. Якщо назва не відповідає функції, оболонка шукає її у списку вбудованих команд оболонки. Якщо збіг знайдено, буде викликано цю вбудовану команду.
Якщо назва не є ні функцією оболонки, ні вбудованою командою, і не містить похилих рисок, bash шукає серед елементів PATH каталог, що містить виконуваний файл з такою назвою. Bash для запам'ятовування повних назв виконуваних файлів використовує геш-таблицю (див. нижче геш під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ). Повний пошук у каталогах із PATH виконується лише тоді, коли команду не знайдено в геш-таблиці. Якщо пошук невдалий, оболонка шукає визначену функцію оболонки під назвою command_not_found_handle. Якщо така функція існує, вона викликається в окремому середовищі виконання, отримавши, як аргументи, початкову команду та її аргументи, а стан виходу функції стає станом виходу цієї підоболонки. Якщо цю функцію не визначено, оболонка друкує повідомлення про помилку та повертає стан виходу 127.
Якщо пошук пройшов успішно, або якщо назва команди містить одну чи кілька похилих рисок, оболонка виконує названу програму в окремому середовищі виконання. Аргумент 0 стає рівним зазначеній назві, а решта аргументів команди — наданим аргументам, якщо такі є.
Якщо це виконання не вдається, оскільки файл не виконуваного формату і не є каталогом, вважається, що це скрипт оболонки, файл, що містить команди оболонки, і оболонка створює новий екземпляр самої себе для виконання. Ця підоболонка повторно ініціалізується, так що результат виглядає так, ніби для обробки скрипту викликано нову оболонку, за винятком того, що розташування команд, які запам'ятав предок (див. нижче геш під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ), зберігає нащадок.
Якщо програма є файлом, що починається з #!, залишок першого рядка визначає інтерпретатор для програми. Оболонка виконує зазначений інтерпретатор в операційних системах, які самі не обробляють файлів цього виконуваного формату. Аргументами інтерпретатора є один необов’язковий аргумент після назви інтерпретатора в першому рядку програми, за яким йде назва програми, а потім - аргументи команди, якщо такі є.
СЕРЕДОВИЩЕ ВИКОНАННЯ КОМАНД¶
Оболонка має середовище виконання, яке складається з таких компонентів:
- відкриті файли, які успадковано оболонкою на момент виклику із модифікаціями з використанням переспрямувань, які передано вбудованій команді exec
- поточний робочий каталог, який встановлено командами cd, pushd або popd чи успадковано оболонкою на момент виклику
- маска режиму створення файлів, яку встановлено за допомогою umask або успадковано від батьківського процесу оболонки
- поточні пастки, які встановлено за допомогою trap
- параметри оболонки, які встановлено наданням значень змінним або за допомогою команди set чи успадковано від батьківського процесу оболонки у середовищі
- функції оболонки, які визначено під час виконання або успадковано від батьківського процесу оболонки у середовищі
- параметри, які увімкнено на момент виклику (типово або за допомогою аргументів рядка команди) або встановлено за допомогою команди set
- параметри, які вмикають за допомогою shopt
- альтернативи оболонки, які визначено за допомогою alias
- ідентифікатори різноманітних процесів, зокрема процесів фонових завдань, значення $$ і значення PPID
Коли виконується проста команда, відмінна від вбудованої команди або функції оболонки, її викликають в окремому середовищі виконання, яке складається із описаних нижче компонентів. Якщо це не вказано окремо, значення успадковуються від оболонки.
- відкриті файли оболонки разом із усіма змінами і додаваннями, які визначено переспрямуваннями команди
- поточна робоча тека
- маска режиму створення файлів
- змінні оболонки і функції, які позначено для експортування, разом зі змінними, які експортовано для команди, які передано у середовищі
- пастки, перехоплені оболонкою, скидаються до значень, успадкованих від батьківської оболонки, а пастки, знехтувані оболонкою, нехтуються
Команда, яку викликано у цьому окремому середовищі, не може впливати на середовище виконання оболонки.
Підоболонка є копією процесу оболонки.
Заміна команд, команди, згруповані в дужках, і асинхронні команди викликаються в середовищі підоболонки, яке є дублікатом середовища оболонки, за винятком того, що пастки, перехоплені оболонкою, скидаються до значень, успадкованих оболонкою під час виклику від свого предка. Вбудовані команди, які викликаються як частина конвеєра, також виконуються в середовищі підоболонки. Зміни, внесені в середовище підоболонки, не можуть вплинути на середовище виконання оболонки.
Підоболонки, створені для виконання заміни команд, успадковують значення параметра -e від батьківської оболонки. Якщо не в режимі posix, bash у таких підоболонках очищає параметр -e.
Якщо після команди йде &, а керування завданнями неактивне, типовим стандартним входом для команди є порожній файл /dev/null. В іншому випадку викликана команда успадковує дескриптори файлу оболонки, що викликає, як змінені перенаправленнями.
СЕРЕДОВИЩЕ¶
При виклику програми їй буде передано маси рядків, який називається середовище. Це список пар назва-значення у такій формі:назва=value.
Оболонка надає декілька способів керування середовищем. При виклику оболонка сканує власне середовище і створює параметр для кожної знайденої назви, автоматично позначаючи його для експортування до дочірніх процесів. Виконувані команди успадковують це середовище. Додавати і вилучати параметри і функції середовища можна за допомогою команд export і declare -x. Якщо буде внесено зміни до значення параметра у середовищі, нове значення стане частиною середовища, замінивши собою старе. Середовище, успадковане будь-якою виконуваною командою, складається з початкового середовища оболонки, чиї значення може бути змінено в оболонці, без усіх пар, які вилучено командою unset, і з усіма додаванням за допомогою команд export і declare -x.
Середовище для будь-якої простої команди або функції може бути тимчасово розширено додаванням до неї префікса із визначенням значень параметрів, як це описано вище у розділі ПАРАМЕТРИ. Такі інструкції визначення значень стосуються лише середовища, яке доступне відповідній команді.
Якщо встановлено параметр -k (див. вбудовану команду set нижче), до середовища команди потраплять усі, а не лише ті, які передують назві команди, надання параметрам значень.
Якщо bash викликає зовнішню команду, для змінної _ буде встановлено значення повної назви файла команди. Цю змінну також буде передано команді у її середовищі.
СТАН ВИХОДУ¶
Станом виходу виконуваної команди буде значенням, яке повернуто системним викликом waitpid або еквівалентною функцією. Діапазоном станів виклику є множина цілих чисел від 0 до 255. Втім, яке це описано нижче, значення, що перевищують 125, можуть використовуватися оболонкою зі спеціальною метою. Значення станів виходу для вбудованих функцій оболонки та складених команд також обмежено цим діапазоном. За певних умов, оболонка використовуватиме спеціальні значення для того, щоб повідомити про певні режим помилок.
З точки зору оболонки, команду, яка завершує роботу із нульовим станом виходу, виконано успішно. Нульовий стан виходу вказує на успіх. Ненульовий стан виходу вказує на помилку. Якщо роботу команди завершено із критичним сигналом N, bash використовує як код стану виходу значення 128+N.
Якщо певну програму не буде знайдено, дочірній процес, який було створено для її виконання, повертає код стану 127. Якщо програму буде знайдено, але її не можна виконати, кодом стану виходу буде 126.
Якщо виконання команди завершується помилкою через помилку під час розгортання або переспрямування, код стану виходу буде більшим за нуль.
Вбудовані команди оболонки повертають стан виходу 0 (істина), якщо їх виконано успішно, і ненульовий стан виходу (хибність), якщо під час виконання станеться помилка. Усі вбудовані команди повертають стан виходу 2, якщо потрібно вказати на неправильне використання, — загалом, неправильне визначення параметрів або пропущені аргументи.
Доступ до стану виходу останньої команди можна здійснювати за допомогою спеціального параметра $?.
Сама оболонка bash повертає стан виходу останньої виконаної команди, якщо не буде виявлено синтаксичної помилки. Якщо помилку буде виявлено, стан виходу буде ненульовим. Див. також опис вбудованої команди exit нижче.
СИГНАЛИ¶
Якщо bash працює в інтерактивному режимі і не використано жодних пасток, оболонка ігноруватиме SIGTERM (отже, kill 0 не завершує роботи інтерактивної оболонки) і перехоплюватиме та оброблятиме SIGINT (отже, не можна перервати вбудовану команду wait). В усіх випадках bash ігноруватиме SIGQUIT. Якщо задіяно керування завданнями, bash ігноруватиме SIGTTIN, SIGTTOU та SIGTSTP.
Невбудовані команди, які виконує bash, мають обробники сигналів, встановлені на значення, успадковані оболонкою від її предка. Коли керування завданнями не діє, асинхронні команди нехтують SIGINT і SIGQUIT на додаток до цих успадкованих обробників. Команди, що виконуються внаслідок підміни команд, нехтують сигнали керування завданнями SIGTTIN, SIGTTOU і SIGTSTP.
Типово вихід з оболонки відбувається після отримання SIGHUP. Перед виходом інтерактивна оболонка повторно надсилає SIGHUP усім запущеним або зупиненим завданням. Зупиненим завданням надсилається SIGCONT, щоб переконатися, що вони отримують SIGHUP. Щоб оболонка не надсилала сигнал певному завданню, його слід видалити з таблиці завдань вбудованою командою disown (див. нижче ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ) або позначити, що воно не має отримувати SIGHUP, за допомогою disown -h.
Якщо параметр оболонки huponexit встановлено за допомогою shopt, то, коли інтерактивна оболонка для входу завершує роботу, bash надсилає всім завданням SIGHUP.
Якщо bash очікує завершення команди і отримує сигнал, для якого встановлено пастку, пастка не буде виконана, доки команда не завершиться. Коли bash очікує на асинхронну команду через вбудовану команду wait, прийняття сигналу, для якого встановлено пастку, призведе до негайного повернення зі вбудованої команди wait зі станом виходу більшим від 128, одразу після чого буде виконано пастку.
Якщо керування завдань не увімкнено, і bash очікує на завершення роботи головної команди, оболонка отримує створені клавіатурою сигнали, зокрема SIGINT (зазвичай, породженим ^C), які користувачі, зазвичай, мають надсилати команді. Таке трапляється, оскільки оболонка і команда перебувають у тій самі групі процесів, що і термінал, і ^C надсилає SIGINT усім процесам у цій групі процесів.
Якщо bash працює без увімкненого керування завданнями і отримує SIGINT під час очікування на завершення основної команди, програма очікує, аж доки основна команда завершить роботу, а потім вирішує, що робити із SIGINT:
- 1.
- Якщо виконання команди переривається сигналом SIGINT, bash вважатиме, що користувач хоче завершити виконання усього скрипту, і працює із сигналом SIGINT (наприклад запуском пастки SIGINT або самостійним завершенням роботи);
- 2.
- Якщо команда не завершить роботу через надсилання SIGINT, програма обробила SIGINT самостійно і не вважала цей сигнал критичним. У цьому випадку bash також не вважатиме SIGINT критичним сигналом, а припускатиме, що SIGINT було використано як частину звичайної процедури роботи програми (наприклад, emacs використовує його для переривання редагування команд) або його було спеціально відкинуто. Втім, bash запустить будь-яку пастку, яку встановлено на SIGINT, як програма це робить для будь-якого іншого сигналу з пасткою, який вона отримує під час очікування на завершення основної команди, для сумісності.
КЕРУВАННЯ ЗАВДАННЯМИ¶
Керування завданнями означає можливість вибірково зупиняти (призупиняти) виконання процесів і продовжувати (поновлювати) їх виконання пізніше. Користувач зазвичай використовує цю можливість через інтерактивний інтерфейс, що надається разом драйвером терміналу ядра операційної системи та bash.
Оболонка асоціює завдання з кожним конвеєром. Вона зберігає таблицю поточних виконуваних завдань, список яких можна вивести за допомогою команди jobs. Коли bash запускає завдання асинхронно (на тлі), виводиться рядок такого вигляду:
[1] 25647
який означає, що це завдання має номер 1 і ID останнього процесу в конвеєрі, пов’язаного з цим завданням 25647. Усі процеси в одному конвеєрі є членами одного завдання. Bash використовує абстракцію завдання як основу для керування завданнями.
Щоб полегшити реалізацію інтерфейсу користувача для керування завданнями, операційна система підтримує поняття поточного ідентифікатора групи процесів термінала. Члени цієї групи процесів (процеси, чий ідентифікатор групи процесів дорівнює поточному ідентифікатору групи процесів термінала) отримують генеровані клавіатурою сигнали, такі як SIGINT. Кажуть, що ці процеси перебувають на передньому плані. Фонові процеси – це процеси, ідентифікатор групи яких відрізняється від терміналу; такі процеси захищені від сигналів, що генеруються клавіатурою. Лише процесам переднього плану дозволяється читати з або, якщо це вказує користувач за допомогою stty tostop, записувати в термінал. Фонові процеси, які намагаються читати з терміналу (записувати в ного, коли діє stty tostop) отримують сигнал SIGTTIN (SIGTTOU) від драйвера термінала ядра, який, якщо його не перехопити, призупиняє процес.
Якщо операційна система, на якій запущено bash, підтримує керування завданнями, bash надає можливість це робити. Введення символу призупинення (зазвичай ^Z, Control-Z) під час виконання процесу призводить до зупинки цього процесу та повернення керування bash. Введення символу відкладеного призупинення (зазвичай ^Y, Control-Y) призводить до зупинення процесу, коли він намагається прочитати вхідні дані з терміналу, і повернення керування до bash. Потім користувач може маніпулювати станом цього завдання, використовуючи команду bg, щоб продовжити його у фоновому режимі, команду fg, щоб продовжити її на передньому плані, або команду kill, щоб його знищити. A ^Z спрацьовує негайно і має додатковий побічний ефект, що полягає у відкиданні очікуваного виведення та введеного раніше тексту.
Існує кілька способів посилатися на завдання в оболонці. Символ % вводить специфікацію завдання (jobspec). Номер завдання n можна вказати як %n. До завдання можна також звертатися за допомогою префікса назви, який використовується для його запуску, або за допомогою підрядка, який з’являється в його командному рядку. Наприклад, %ce посилається на зупинене завдання, назва команди якого починається з ce. Якщо префікс відповідає більш ніж одному завданню, bash повідомляє про помилку. Використання %?ce, з іншого боку, стосується будь-якого завдання, в командному рядку якого є рядок ce. Якщо підрядок відповідає більш ніж одному завданню, bash повідомляє про помилку. Символи %% і %+ посилаються на так зване поточне завдання, тобто, останнє завдання, зупинене, коли воно було на передньому плані або запущене у фоновому режимі. На попереднє завдання можна послатися, скориставшись %-. Якщо є тільки одне завдання, %+ і %- обидва можна використати для посилання на нього. У виводі, що стосується завдань (наприклад, вивід команди jobs), поточне завдання завжди позначається прапорцем +, а попереднє завдання - -. Один % (без зазначення специфікації завдання) також стосується поточного завдання.
Щоб вивести завдання на передній план, можна просто використати його назву: %1 є синонімом “fg %1”, що переносить завдання 1 із фону на передній план. Аналогічно, “%1 &” відновлює роботу 1 у фоновому режимі, що еквівалентно “bg %1”.
Оболонка дізнається відразу, коли завдання змінює стан. Зазвичай, bash очікує, перш ніж вивести повідомлення про зміни в статусі завдання, щоб не переривати іншого виводу. Якщо увімкнено параметр -b для вбудованої команди set, bash повідомлятиме про ці зміни негайно. Будь-яка пастка на SIGCHLD виконується при виході для кожного дочірнього процесу.
Якщо спроба вийти з bash робиться за наявності зупинених завдань (або запущених, якщо параметр оболонки checkjobs увімкнено за допомогою вбудованої команди shopt), оболонка друкує попередження, і, якщо параметр checkjobs увімкнено, виводить список завдань та їхні стани. Потім для перевірки їх стану можна скористатись командою jobs. Якщо другу спробу вийти зроблено без проміжних команд, оболонка не друкує іншого попередження, і будь-які зупинені завдання завершуються.
Коли оболонка очікує на завдання або процес із використанням вбудованої команди wait, і увімкнено керування завданнями, wait повернеться, коли завдання змінить стан. Параметр -f змушує wait, перш ніж повернутися, зачекати на завершення завдання або процесу.
ЗАПИТИ¶
За інтерактивного виконання, bash показує первинне запрошення PS1, коли інтерпретатор готовий читати команду, і вторинне запрошення PS2, коли для завершення команди потрібне додаткове введення. Bash показує PS0 після читання команди, але перед її виконанням. Bash показує PS4 як описано вище, перш ніж відстежувати кожну команду, коли увімкнено параметр -x. Bash дозволяє налаштувати ці рядки запрошень, вставляючи ряд спеціальних символів із зворотною косою рискою перед ними, які декодуються так:
- \a
- символ дзвінка ASCII (07)
- \d
- дата у форматі «день_тижня місяць дата» (наприклад, «Tue May 26»)
- \D{формат}
- формат передається в strftime(3), а результат вставляється в рядок запиту; порожній формат призводить до відображення часу для певної локалі. Фігурні дужки потрібні
- \e
- символ escape в ASCII (033)
- \h
- назва вузла до першої `.'
- \H
- назва вузла
- \j
- кількість завдань, що оболонка зараз ними керує
- \l
- основа назви файлу пристрою терміналу оболонки
- \n
- новий рядок
- \r
- повернення каретки
- \s
- назва оболонки, основа назви $0 (частина після останньої косої риски)
- \t
- поточний час у 24-годинному форматі HH:MM:SS
- \T
- поточний час у 12-годинному форматі HH:MM:SS
- \@
- поточний час у 12-годинному форматі ДП/ПП
- \A
- поточний час у 24-годинному форматі HH:MM
- \u
- назва облікового запису поточного користувача
- \v
- версія bash (наприклад, 2.00)
- \V
- випуск bash, версія + рівень модифікації (наприклад, 2.00.0)
- \w
- значення змінної оболонки PWD ($PWD) $HOME скороченим тильдою (використовується значення змінної PROMPT_DIRTRIM)
- \W
- базова назва $PWD з $HOME, скороченим тильдою
- \!
- номер у журналі цієї команди
- \#
- номер цієї команди
- \$
- якщо ефективним ідентифікатором користувача (UID) є 0, #, інакше $
- \nnn
- символ, що відповідає вісімковому числу 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. (На клавіатурах без клавіші Meta, M-x означає ESC x, тобто, натискання клавіші ESC, а потім x. Це робить ESC Meta-префіксом. Комбінація M-C-x означає ESC-Control-x, або натискання клавіші ESC, а потім утримання клавіші Control під час натискання клавіші x.)
Команди readline можуть отримувати числові аргументи, які зазвичай діють як число повторень. Іноді, однак, важливим є знак аргументу. Передача від'ємного аргументу команді, яка діє в прямому напрямку (наприклад., kill-line) змушує цю команду діяти у зворотному напрямку. Нижче наведено команди, які опрацьовують аргументи інакше.
Коли команда описується як вбитий текст, видалений текст зберігається для можливого майбутнього пошуку (висмикування). Вбитий текст зберігається в кільці вбитого. Послідовні вбиття призводять до того, що текст накопичується в один блок, який можна висмикнути відразу. Команди, які не вбивають тексту, відокремлюють шматки тексту на кільці вбитого.
Ініціалізація Readline¶
Readline налаштовується розміщенням команд у файлі ініціалізації (файл inputrc). Назва цього файлу береться зі значення змінної INPUTRC. Якщо цю змінну не встановлено, типовим є ~/.inputrc. Якщо цей файл не існує або його неможливо прочитати, кінцевим типовим значенням є /etc/inputrc. Коли запускається програма, яка використовує бібліотеку readline, зчитується файл ініціалізації, а також установлюються прив’язки клавіш і змінні. У файлі ініціалізації readline дозволено лише кілька основних конструкцій. Порожні рядки нехтуються. Рядки, що починаються з #, є коментарями. Рядки, що починаються з $, вказують на умовні конструкції. Інші рядки позначають налаштування прив'язки клавіш і змінних.
Типові прив’язки клавіш можна змінити за допомогою файлу inputrc. Інші програми, які використовують цю бібліотеку, можуть додавати власні команди та прив’язки.
Наприклад, вписування
M-Control-u: universal-argument
Передбачено розпізнавання таких назв символів: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE та TAB.
Окрім назв команд, readline уможливлює пов'язування комбінацій клавіш із рядком, який буде вставлено, коли буде натиснуто комбінацію (макрос).
Клавіатурні скорочення у readline¶
Синтаксис записів, які керують прив'язкою клавіш у файлі inputrc, є доволі простим. Достатньо вказати назву команди або текст макроса та послідовність клавіш, з якою слід пов'язати цю команду чи макрос. Комбінацію клавіш можна вказати в один з двох способів: у формі символічної назви клавіш, із можливими префіксами Meta- або Control-, або у формі послідовності клавіш.
При використанні форми назва_комбінації:назва_функції або макрос, назва_комбінації є комбінацією назв клавіш у латинській розкладці. Приклад:
Meta-Rubout: backward-kill-word
Control-o: "> output"
У наведеному вище прикладі C-u пов'язано із функцією universal-argument, M-DEL пов'язано із функцією backward-kill-word, а C-o пов'язано із запуском макроса, який записано у правій частині виразу (тобто вставити текст ``> output'' до рядка).
У другій формі, "послідовність_клавіш":назва_функції або макрос, послідовність_клавіш відрізняється від назви_комбінації вище тим, що рядки, які описують усю послідовність клавіш можна вказати, записавши послідовність у подвійних лапках. Можна використовувати деякі із екранованих послідовностей у стилі GNU Emacs, як у наведеному нижче прикладі, але розпізнавання символічних назв клавіш не передбачено.
"\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:
Окрім екранованих послідовностей у стилі GNU Emacs, доступний другий набір екранувань зворотною похилою рискою:
- \a
- гудок (дзвінок)
- \b
- backspace
- \d
- Delete
- \f
- подавання бланку
- \n
- новий рядок
- \r
- повернення каретки
- \t
- горизонтальна табуляція
- \v
- вертикальна табуляція
- \nnn
- восьмибітовий символ, значенням якого є вісімкове значення nnn (від однієї до трьох цифр)
- \xHH
- восьмибітовий символ, значенням якого є шістнадцяткове значення HH (від однієї до двох шістнадцяткових цифр)
При введення тексту макросу для позначення визначення макросу слід використовувати одинарні або подвійні лапки. Текст поза лапками вважатиметься назвою функції. У вмісті макросу буде розгорнуто усі описані вище екрановані символом зворотної похилої риски послідовності. Символ зворотної похилої риски екранує будь-який інший символ у тексті макросу, зокрема " та '.
Bash дозволяє показувати або змінювати поточні прив'язки клавіш readline за допомогою вбудованої команди bind. Під час інтерактивного використання режим редагування можна перемкнути за допомогою параметра -o вбудованої команди set (див. нижче ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ).
Змінні Readline¶
У readline передбачено змінні, якими можна скористатися для налаштовування поведінки редактора. Значення змінної може бути встановлено у файлі inputrc за допомогою інструкції у такій формі:
set назва_змінної значення
Якщо не зазначено, змінні рядка readline можуть набувати значень On або Off (без урахування регістру). Нерозпізнані назви змінних нехтуються. Коли читається значення змінної, порожні або нульові значення, "on" (нечутливе до регістру) і "1" еквівалентні On. Решта значень еквівалентні Off. Змінні та їх типові значення:
- active-region-start-color
- Рядкова змінна, яка керує кольором та тлом тексту при показі тексту в активній області (див. опис enable-active-region нижче). Ця змінна не повинна приймати будь-яких фізичних позицій символів на екрані, отже вона має складатися лише з керівних послідовностей символів термінала. Її буде виведено до термінала до показу тексту в активній області. Для цієї змінної буде відновлено типове значення під час кожної зміни типу термінала. Типовим значенням є рядок, який переводить термінал у надзвичайний режим, отриманий з опису термінала terminfo. Зразковим значенням може бути "\e[01;33m".
- active-region-end-color
- Рядкова змінна, яка «скасовує» наслідки застосування active-region-start-color і відновлює «звичайний» вигляд термінала після показу тексту в активній області. Цей рядок не повинен приймати жодних фізичних позицій символів на екрані, отже, він має складатися лише з екранованих послідовностей термінала. Його буде виведено до термінала після показу тексту в активній області. Для цієї змінної буде відновлено типове значення при зміні типу термінала. Типовим значенням є рядок, який відновлює термінал з надзвичайного режиму, отриманий з опису термінала terminfo. Зразок значення: "\e[0m".
- bell-style (audible)
- Керує тим, що відбудеться, коли readline звертається до звукового сигналу терміналу. Якщо встановлено none, readline не подає звукового сигналу. Якщо встановлено visible, readline використовує видимий дзвінок, якщо такий є. Якщо встановлено audible, намагається подати звуковий сигнал терміналу.
- bind-tty-special-chars (On)
- Якщо встановлено On, readline намагається пов'язати керувальні символи, які спеціально обробляються термінальним драйвером ядра, з їх еквівалентами readline.
- blink-matching-paren (Off)
- Якщо встановлено On, readline намагається короткочасно перемістити курсор до відкритої дужки, коли вставлено закриту дужку.
- colored-completion-prefix (Off)
- Якщо встановлено On, readline у переліку завершень виводить спільний префікс набору можливих завершень іншим кольором. Визначення кольору беруться зі значення змінної середовища LS_COLORS. Якщо у $LS_COLORS є визначення кольору для нетипового суфікса «readline-colored-completion-prefix», readline використовуватиме цей колір для типового префікса замість типового кольору.
- colored-stats (Off)
- Якщо встановлено On, readline показує можливі завершення, використовуючи різні кольори, щоб вказують на тип файлу. Визначення кольору беруться зі значення змінної середовища LS_COLORS.
- comment-begin (“#”)
- Рядок, який буде вставлено, якщо буде виконано команду readline insert-comment. Цю команду пов'язано із M-# у режимі emacs і # у режимі команд vi.
- completion-display-width (-1)
- Кількість позицій стовпчиків на екрані, які буде використано для показу можливих варіантів при виконанні автоматично доповнення. Значення буде проігноровано, якщо воно менше 0 або більше за ширину екрана у терміналі. Значення 0 призведе до показу відповідників по одному на рядок. Типовим є значення -1.
- completion-ignore-case (Off)
- Якщо встановлено значення On, readline виконує пошук відповідників за назвою файла і доповнює текст без врахування регістру символів.
- completion-map-case (Off)
- Якщо встановлено значення On і увімкнено completion-ignore-case, readline оброблятиме дефіси (-) та підкреслювання (_) як еквіваленти при виконання пошуку та автоматичного доповнення назв файлів без врахування регістру символів.
- completion-prefix-display-length (0)
- Максимальна довжина у символах загального префікса у списку можливих варіантів доповнення, для якої префікс буде показано без видозміни. Якщо встановлено додатне значення, при показі варіантів автоматичного доповнення загальний префікс, довший за встановлене значення, буде замінено обрізаним варіантом, який завершуватиметься трьома крапками.
- completion-query-items (100)
- Визначає, коли користувач отримує запит щодо показу певної кількості можливих доповнень, згенерованих командою possible-completions. Можна встановити будь-яке ціле значення, більше або рівне нулю. Якщо кількість можливих доповнень більша або дорівнює значенню цієї змінної, readline запитає, чи бажає користувач їх переглядати; в іншому разі вони просто виведуться в терміналі. Нульове значення означає, що readline ніколи не повинна надсилати запит; від'ємні значення вважатимуться нульовими.
- convert-meta (On)
- Якщо встановлено значення On, readline перетворюватиме символи зі встановленим восьмим бітом у послідовність клавіш ASCII, видаляючи восьмий біт і додаючи префікс escape-символу (фактично, використовуючи escape як метапрефікс). Типово – On, але readline встановить його в Off, якщо локаль містить восьмибітні символи. Значення цієї змінної залежить від категорії локалі LC_CTYPE і може змінюватися при зміні локалі.
- disable-completion (Off)
- Якщо встановлено значення On, readline успадковуватиме автоматичне доповнення слів. Символи автоматичного доповнення буде встановлено до рядка так, їх було пов'язано із self-insert.
- echo-control-characters (On)
- Якщо встановлено значення On, у операційних системах, які сигналізують про відповідну підтримку, readline повторить символ, який відповідає сигналу, створеному з клавіатури.
- editing-mode (emacs)
- Визначає, буде readline починати роботу із набором прив'язок до комбінацій клавіш, подібним до Emacs чи vi. Для параметра режим_редагування можна встановити значення emacs або vi.
- emacs-mode-string (@)
- Якщо змінну show-mode-in-prompt увімкнено, цей рядок виводиться безпосередньо перед останнім рядком основного запиту, коли активний режим редагування emacs. Значення розгортається як прив’язка клавіші, тому доступний стандартний набір мета- та керувальних префіксів і керувальних послідовностей зі зворотною косою рискою. Використовуйте екрановані послідовності \1 та \2, щоб почати та закінчити послідовності недрукованих символів, які можна використовувати для вбудовування послідовності керування терміналом у рядок режиму.
- enable-active-region (On)
- Аргументом точка є поточна позиція курсора, а позначка посилається на збережену позицію курсора. Текст між точкою вставлення та позначкою будемо називати областю. Якщо для цієї змінної встановлено значення On, readline дозволить певним командам позначати область як активну. Якщо область є активною, readline підсвічуватиме текст в області з використанням значення active-region-start-color, типовим значенням якої є рядок, який вмикає надзвичайний режим термінала. В активній області буде показано текст, який вставлено вставленням у дужках, та будь-який відповідний текст, який знайдено нарощувальним або ненарощувальним пошуком у журналі.
- enable-bracketed-paste (On)
- Коли встановлено On, readline налаштує термінал так, що дозволить йому вміщувати кожну вставку в буфер редагування як один рядок символів, замість того, щоб обробляти кожен символ так, ніби він був прочитаний з клавіатури. Це запобігає виконанню у readline будь-яких команд з редагування, прив'язаних до послідовностей клавіш, що можуть з'являтися у вставленому тексті.
- enable-keypad (Off)
- Якщо встановлено значення On, readline намагатиметься ввімкнути програмну клавіатуру під час її виклику. Деякі системи потребують цього, щоб увімкнути клавіші зі стрілками.
- enable-meta-key (On)
- Коли встановлено On, readline спробує ввімкнути будь-який ключ метамодифікатора, про підтримку якого термінал заявляє під час його виклику. На багатьох терміналах метаключ використовується для надсилання восьмибітових символів.
- expand-tilde (Off)
- Якщо встановлено On, коли readline намагається закінчити слово, виконується розгортання тильди.
- history-preserve-point (Off)
- Якщо встановлено On, код журналу намагається розмістити курсор у тому самому місці в кожному рядку журналу, отриманому за допомогою previous-history або next-history.
- history-size (не встановлено)
- Задає максимальну кількість записів журналу, збережених у списку журналу. Якщо встановлено значення 0, усі наявні записи журналу видаляються, а нові записи не зберігаються. Якщо встановлено значення менше нуля, кількість записів журналу не обмежена. Типово кількість записів журналу встановлюється за значенням змінної оболонки HISTSIZE. За спроби встановити для history-size нечислове значення, для максимальної кількості записів журналу буде встановлено значення 500.
- horizontal-scroll-mode (Off)
- Коли встановлено On, змушує readline використовувати для показу один рядок, прокручуючи введення горизонтально на одному екранному рядку, коли він стає довшим за ширину екрана, а не переносити на новий рядок. Цей параметр автоматично вмикається для терміналів висотою 1.
- input-meta (Off)
- Якщо встановлено On, readline увімкне восьмибітове введення (тобто, не видалятиме восьмого біту зі зчитуваних символів), незалежно від того, що, за твердженням терміналу, він підтримує. Назва meta-flag є синонімом цієї змінної. Типовим є Off, але readline встановить On, якщо локаль містить восьмибітові символи. Значення цієї змінної залежить від категорії локалі LC_CTYPE і може змінюватися при зміні локалі.
- isearch-terminators (“C-[C-J”)
- Рядок символів, який повинен завершити інкрементний пошук без подальшого виконання символу як команди. Якщо цій змінній не надано значення, інкрементний пошук завершать символи ESC і C-J.
- keymap (emacs)
- Задає поточну розкладку клавіш readline. Допускаються назви розкладок: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command і vi-insert. vi еквівалентне vi-command; emacs еквівалентне emacs-standard. Типовим є значення emacs; значення editing-mode також впливає на типову розкладку.
- keyseq-timeout (500)
- Визначає тривалість очікування readline на символ, під час читання неоднозначної послідовності клавіш (такої, яка може сформувати повну послідовність клавіш на основі вже введеного, або може продовжити введення для завершення довшої послідовності клавіш). Якщо вхід не отримано протягом затримки, readline використає коротшу, але повну послідовність клавіш. Значення вказано в мілісекундах, тому значення 1000 означає, що readline чекатиме на додаткове введення одну секунду. Якщо для цієї змінної встановлено значення, менше або рівне нулю, або нечислове значення, readline чекатиме натиснення наступної клавіші, щоб вирішити, яку послідовність клавіш завершити.
- mark-directories (On)
- Якщо встановлено в On, завершені каталоги матимуть похилу в кінці назв.
- mark-modified-lines (Off)
- Якщо встановлено в On, рядки журналу, що були змінені будуть показані з зіркою попереду (*).
- mark-symlinked-directories (Off)
- Якщо встановлено значення On, до повних назв, які є символьними посиланнями на каталоги, додається коса риска (залежно від значення mark-directories).
- match-hidden-files (On)
- Ця змінна, якщо її встановити в On, примушує readline знаходити файли, назви яких починаються з `.' (приховані файли) коли відбувається доповнення назв файлів. Якщо встановити значення Off, користувачу треба буде надавати передню `.' в назві файлу, щоб його було доповнено.
- Якщо встановлено значення On, доповнення за меню показує спільний префікс списку можливих доповнень (який може бути порожнім) перед циклічним переходом за списком.
- output-meta (Off)
- Якщо встановлено значення On, readline показуватиме символи зі встановленим восьмим бітом безпосередньо, а не у вигляді escape-послідовності з метапрефіксом. Типовим є Off, але readline встановить його на On, якщо локаль містить восьмибітові символи. Значення цієї змінної залежить від категорії локалі LC_CTYPE і може змінюватися при зміні локалі.
- page-completions (On)
- Якщо встановлено в On, readline використовуватиме внутрішній пейджер схожий на more для показу повноекранного списку можливих доповнень за раз.
- print-completions-horizontally (Off)
- Якщо встановлено значення On, readline виводитиме доповнення зі збігами в алфавітному порядку горизонтально, а не донизу екрану.
- revert-all-at-newline (Off)
- Якщо встановлено значення On, readline перед поверненням скасує всі зміни в рядках журналу, коли виконується accept-line. Типово рядки журналу можуть бути змінені й зберігають окремі списки скасування для викликів readline.
- show-all-if-ambiguous (Off)
- Це змінює типову поведінку функцій доповнення. Якщо встановлено значення On, для слів, які мають більше одного можливого доповнення, замість дзвінка будуть негайно виводитися збіги.
- show-all-if-unmodified (Off)
- Це змінює типову поведінку функцій доповнення так само, як show-all-if-ambiguous. Якщо встановлено значення On, для слів, які мають більше одного можливого доповнення без будь-якого можливого часткового доповнення (можливі доповнення не мають спільного префікса), замість дзвінка будуть негайно виводитися збіги.
- show-mode-in-prompt (Off)
- Якщо встановлено в On, додайте рядок на початку, щоб показувати підказку режиму редагування: emacs, команда vi, або вставлення vi. Рядки режиму може встановлювати користувач (напр., emacs-mode-string).
- skip-completed-text (Off)
- Якщо встановлено в On, це змінює типову поведінку доповнення коли один відповідник вставляється в рядок. Цей параметр працює лише коли виконується доповнення всередині слова. Якщо увімкнено, readline не вставляє символи, що збігаються з символами після точки у слові, що доповнюється, тож частини слів після курсора не дублюються.
- vi-cmd-mode-string ((cmd))
- Якщо змінну show-mode-in-prompt увімкнено, цей рядок виводиться безпосередньо перед останнім рядком основного запиту, коли активний режим редагування vi у режимі команди. Значення розгортається як прив’язка клавіші, тому доступний стандартний набір мета- та керувальних префіксів і керувальних послідовностей зі зворотною косою рискою. Використовуйте екрановані послідовності \1 та \2, щоб почати та закінчити послідовності недрукованих символів, які можна використовувати для вбудовування послідовності керування терміналом у рядок режиму.
- vi-ins-mode-string ((ins))
- Якщо змінну show-mode-in-prompt увімкнено, цей рядок виводиться безпосередньо перед останнім рядком основного запиту, коли активний режим редагування vi у режимі вставлення. Значення розгортається як прив’язка клавіші, тому доступний стандартний набір мета- та керувальних префіксів і керувальних послідовностей зі зворотною косою рискою. Використовуйте екрановані послідовності \1 та \2, щоб почати та закінчити послідовності недрукованих символів, які можна використовувати для вбудовування послідовності керування терміналом у рядок режиму.
- visible-stats (Off)
- Якщо встановлено значення On, при виведенні списку можливих доповнень до назви файла буде дописано символ, який позначає тип файла, який виводить команда stat(2).
Умовні конструкції readline¶
Readline реалізує засіб, подібний за духом до умовної компіляції препроцесора C, що дозволяє виконувати прив’язки клавіш і налаштування змінних у результаті тестів. Використовуються чотири директиви обробника.
- $if
- Конструкція $if дозволяє виконувати прив’язки на основі режиму редагування, терміналу, який використовується, або програми, що використовує readline. Текст тесту після будь-якого оператора порівняння поширюється до кінця рядка; якщо не зазначено інше, для його ізолювання не потрібні символи.
- mode
- Форма mode= директиви $if використовується для перевірки того, перебуває readline у режимі emacs чи vi. Це можна використати разом з командою set keymap, наприклад, щоб установити прив'язки лише для розкладок emacs-standard і emacs-ctlx, якщо readline запущено в режимі emacs.
- term
- Формою term= можна скористатися для включення специфічних для термінала прив'язок клавіш, можливо, щоб пов'язати послідовності натискання клавіш із функціональними клавішами термінала. Слово у правій частині виразу після = підлягатиме перевірці на відповідність повній назві термінала та частині назви термінала до першого символу -. Це, наприклад, надаватиме змогу встановити відповідність sun як до sun, так і до sun-cmd.
- version
- Перевіркою version можна скористатися для виконання порівнянь версій readline. Змінну version буде розгорнуто до поточної версії readline. Множина операторів порівняння складається з = (і ==), !=, <=, >=, < та >. Номер версії, який буде використано праворуч від оператора, складається з номера основної версії, необов'язкової десяткової крапки та необов'язкового номера проміжної версії (наприклад, 7.1). Якщо проміжну версію не вказано, її значення вважатиметься рівним 0. Оператор може бути відокремлено від рядка version і від номера версії пробілами.
- application
- Конструкцією application можна скористатися для включення специфічних для програми параметрів. Кожна з програм, у яких використано бібліотеку readline, встановлює назву програми, а файл ініціалізації може перевіряти певне значення. Цим можна скористатися для прив'язки послідовностей клавіш до функцій, які можуть бути корисними для певної програми. Наприклад, вказана нижче команда додає послідовність клавіш, яка бере у лапки поточне або попереднє слово у bash:
$if Bash # Нейтралізація поточного або попереднього слова "\C-xq": "\eb\"\ef\"" $endif
- variable
- Конструкція variable надає у ваше розпорядження прості перевірки на рівність змінних та значень readline. Дозволеними операторами порівняння є =, == і !=. Назву змінної має бути відокремлено від оператора порівняння пробілом; оператор може бути відокремлено від значення у правій частині пробілом. Перевірки можна виконувати як для булевих, так і для рядкових змінних. Булеві зміні слід порівнювати зі значеннями on і off.
- $endif
- Ця команда, як у попередньому прикладі, перериває виконання команди $if.
- $else
- Команди у цій гілці директиви $if буде виконано, якщо не буде пройдено перевірку умови.
- $include
- Ця директива приймає одну назву файла як аргумент і читає команди і прив'язки з цього файла. Наприклад, наступна директива виконає читання /etc/inputrc:
$include /etc/inputrc
Пошук¶
У readline передбачено команди для пошуку у журналі команд (див. ЖУРНАЛ нижче) рядків, які містять вказаний рядок. Передбачено два режими пошуку: нарощувальний і ненарощувальний.
Нарощувальний пошук розпочинається перед тим, як користувач завершив введення рядка для пошуку. При введення кожного з символів рядка пошуку, readline показуватиме наступний запис із журналу, який відповідає введеному на поточний момент рядку. Для нарощувального пошуку достатньо мінімальної кількості символів для знаходження бажаного запису журналу. Для переривання нарощувального пошуку використовують значення змінної isearch-terminators. Якщо із цією змінною не пов'язано значення, нарощувальний пошук можна буде перервати натисканням клавіші Esc або комбінації клавіш Ctrl-J. Натискання комбінації клавіш Ctrl-G призведе до переривання нарощувального пошуку і відновлення початкового рядка. При перериванні пошуку запис журналу, який містить рядок пошуку стане поточним рядком команди.
Щоб знайти інші відповідні записи в списку журналу, наберіть Control-S або Control-R, відповідно. Це почне пошук назад або вперед в журналу на наступний запис, щоб відповідає вже набраному рядку. Будь-які інші комбінації клавіш прив'язані до команд readline припинять пошук та виконають команду. Наприклад, newline припинить пошук та прийме рядок, таким чином виконуючи команду зі списку журналу.
Readline запам'ятовує останній рядок нарощувального пошуку. Якщо буде двічі поспіль введено Ctrl-R при визначенні рядка нового пошуку, буде використано рядок пошуку з пам'яті.
Ненарощувальні пошуки зчитують весь рядок пошуку перед тим, як починати шукати в рядках журналу. Рядок пошуку може бути набраний користувачем або бути частиною поточного рядка.
Назви команд readline¶
Далі наведено список назв команд та типові послідовності клавіш, до яких вони прив'язані. Назви команд без відповідної послідовності клавіш є типово неприв'язаними. В наступних описах, point посилається на поточну позицію курсора, а mark вказує на позицію курсора, збережену командою set-mark. Текст між точкою і позначкою позначається, як region.
Команди для пересування¶
- beginning-of-line (C-a)
- Перейти до початку поточного рядка.
- end-of-line (C-e)
- Перейти до кінця рядка.
- forward-char (C-f)
- Перейти на символ вперед.
- backward-char (C-b)
- Перейти назад на один символ.
- forward-word (M-f)
- Перейти вперед до кінця наступного слова. Слова складаються з літер та цифр.
- backward-word (M-b)
- Перейти назад до початку поточного або попереднього слова. Слова складаються з літер і цифр.
- shell-forward-word
- Перейти вперед до кінця наступного слова. Словами вважаються послідовності символів, які обмежено ненейтралізованими метасимволами оболонки.
- shell-backward-word
- Перейти назад до початку поточного або попереднього слова. Словами вважаються послідовності символів, які обмежено ненейтралізованими метасимволами оболонки.
- previous-screen-line
- Спробувати перемістити позицію до того самого стовпчика фізичного екрана у попередньому рядку фізичного екрана. Це не дасть бажаного результату, якщо поточний рядок readline не займає більше одного фізичного рядка або якщо позиція не перевищує довжини запиту разом із довжиною екрана у символах.
- next-screen-line
- Спробувати перемістити позицію до того самого стовпчика фізичного екрана у наступному рядку фізичного екрана. Це не дасть бажаного результату, якщо поточний рядок readline не займає більше одного фізичного рядка або якщо довжина поточного рядка readline не перевищує довжини запиту разом із довжиною екрана у символах.
- clear-display (M-C-l)
- Очистити екран і, якщо можна, буфер гортання термінала, потім перемалювати поточний рядок, лишивши поточний рядок на початку екрана.
- clear-screen (C-l)
- Очистити екран, потім перемалювати поточний рядок, лишивши поточний рядок на початку екрана. З аргументом освіжити поточний рядок без очищення екрана.
- redraw-current-line
- Освіжити поточний рядок.
Команди для роботи з журналом¶
- accept-line (Newline, Return)
- Прийняти рядок, незалежно від того, де перебуває курсор. Якщо цей рядок є непорожнім, додати його до списку журналу відповідно до стану змінної HISTCONTROL. Якщо рядок є зміненим рядком журналу, потім відновити початковий стан рядка журналу.
- previous-history (C-p)
- Отримати попередню команду зі списку журналу, пересунувшись назад списком.
- next-history (C-n)
- Отримати наступну команду зі списку журналу, пересунувшись вперед списком.
- beginning-of-history (M-<)
- Перейти до першого рядка у журналі.
- end-of-history (M->)
- Перейти до кінця журналу введення, тобто до рядка, який зараз вводять.
- operate-and-get-next (C-o)
- Прийняти поточний рядок до виконання і отримати наступний рядок з журналу відносно поточного для редагування. Числовий аргумент, якщо його вказано, визначає запис журналу, яким слід скористатися замість поточного рядка.
- fetch-history
- Із числовим аргументом отримати відповідний запис у списку журналу і зробити його поточним рядком. Без аргументу, перейти назад до першого запису у списку журналу.
- reverse-search-history (C-r)
- Шукати у напрямку до початку журналу, починаючи з поточного рядка і пересуваючись «вгору» журналу, якщо це потрібно. Це нарощувальний пошук.
- forward-search-history (C-s)
- Шукати у напрямку до кінця журналу, починаючи з поточного рядка і пересуваючись «вниз» журналу, якщо це потрібно. Це нарощувальний пошук.
- non-incremental-reverse-search-history (M-p)
- Шукати у напрямку до початку журналу, починаючи з поточного рядка, з використанням ненарощувального пошуку рядка, який надано користувачем.
- non-incremental-forward-search-history (M-n)
- Шукати у напрямку до кінця журналу з використанням ненарощувального пошуку рядка, який надано користувачем.
- history-search-forward
- Шукати вперед через історію рядок з символами між початком поточного рядка і точкою. Це - ненарощувальний пошук.
- history-search-backward
- Шукати назад через історію рядок з символами між початком поточного рядка і точкою. Це - ненарощувальний пошук.
- history-substring-search-backward
- Шукати назад через історію рядок з символами між початком поточного рядка і поточною позицією курсора (точкою). Рядок пошуку може мати збіг в будь-де в низці журналу. Це - ненарощувальний пошук.
- history-substring-search-forward
- Шукати вперед через історію рядок з символами між початком поточного рядка і точкою. Рядок пошуку може мати збіг будь-де в низці журналу. Це - ненарощувальний пошук.
- yank-nth-arg (M-C-y)
- Вставити перший аргумент попередньої команди (переважно друге слово на попередньому рядку) в точці. З аргументом n, вставити n-те слово з попередньої команди (слова в попередній команді починаються з слова 0). Негативний аргумент вставляє n-те слово від кінця попередньої команди. Коли аргумент n обчислено, його витягують як ніби вказано розкриття журналу "!n".
- yank-last-arg (M-., M-_)
- Вставити останній аргумент попередньої команди (останнє слово попереднього запису журналу). З числовим аргументом, поводиться так само як yank-nth-arg. Успішні виклики в yank-last-arg пересуваються назад в списку журналу, вставляючи останнє слово (або слово, вказане аргументом першого виклику) кожного рядка по черзі. Будь-який числовий аргумент наданий цим послідовним викликам визначає напрямок пересування через історію. Негативний аргумент перемикає напрямок через історію (назад чи вперед), Засоби розкриття журналу використовуються для витягання останнього слова, як ніби вказано розкриття журналу "!$".
- shell-expand-line (M-C-e)
- Розгорнути рядок, як це робить оболонка. У результати буде виконано розгортання альтернатив та журналу, а також усіх розгортань слів оболонки. Опис розгортання за журналом наведено у розділі ДОПОВНЕННЯ ЗА ЖУРНАЛОМ.
- history-expand-line (M-^)
- Виконати доповнення за журналом для поточного рядка. Опис доповнення за журналом можна знайти у розділі ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче.
- magic-space
- Виконати доповнення за журналом для поточного рядка і вставити пробіл. Опис доповнення за журналом можна знайти у розділі ДОПОВНЕННЯ ЗА ЖУРНАЛОМ нижче.
- alias-expand-line
- Виконати розгортання альтернатив у поточному рядку. Опис розгортання альтернатив можна знайти у розділі АЛЬТЕРНАТИВИ.
- history-and-alias-expand-line
- Виконати доповнення за журналом та розгортання альтернатив у поточному рядку.
- insert-last-argument (M-., M-_)
- Синонім до yank-last-arg.
- edit-and-execute-command (C-x C-e)
- Викликати редактор для поточного рядка команди і виконати результат як команди оболонки. Bash спробує викликати як редактор $VISUAL, $EDITOR і emacs, саме у такому порядку.
Команди для змінення тексту¶
- end-of-file (зазвичай C-d)
- Символ, що вказує кінець файла, як установлено, наприклад, у ``stty''. Якщо цей символ читається, коли в рядку немає символів, а позиція міститься на початку рядка, readline інтерпретує його як кінець уведення і повертає EOF.
- delete-char (C-d)
- Видалити символ у точці. Якщо ця функція прив’язана до того ж символу, що й символ tty EOF, зазвичай C-d, опис дії див. вище.
- backward-delete-char (Rubout)
- Видалити символ перед курсором. Якщо надано числовий аргумент, зберегти видалений текст у кільці вбитого.
- forward-backward-delete-char
- Видалити символ під курсором, якщо курсор не перебуває в кінці рядка; в останньому випадку буде видалено символ перед курсором.
- quoted-insert (C-q, C-v)
- Додати наступний уведений символ до рядка дослівно. Так можна вставити послідовності клавіш, наприклад, C-q.
- tab-insert (C-v TAB)
- Вставити символ табуляції.
- self-insert (a, b, A, 1, !, ...)
- Вставити введений символ.
- transpose-chars (C-t)
- Поміняти місцями символ перед курсором і символ під курсором, також перемістити курсор вперед. Якщо курсор перебуває в кінці рядка, то буде переставлено останні два символи рядка. Від'ємні аргументи не діють.
- transpose-words (M-t)
- Поміняти місцями слово перед курсором і слово після курсора, також перемістити курсор вперед. Якщо курсор перебуває в кінці рядка, то буде переставлено останні два слова в рядку.
- upcase-word (M-u)
- Перевести поточне (або наступне) слово у верхній регістр. З від'ємним аргументом, перевести у верхній регістр попереднє слово, не переміщуючи курсора.
- downcase-word (M-l)
- Перевести поточне (або наступне) слово у нижній регістр. З від'ємним аргументом, перевести у нижній регістр попереднє слово, не переміщуючи курсора.
- capitalize-word (M-c)
- Почати з великої букви поточне (або наступне) слово. З від'ємним аргументом, Почати з великої букви попереднє слово, не переміщуючи курсора.
- overwrite-mode
- Перемкнути режим заміни. З явним додатним числовим аргументом перемикається в режим заміни. З явним недодатним числовим аргументом перемикається в режим вставки. Ця команда впливає лише на режим emacs; режим vi вмикає заміну інакше. Кожен виклик readline() починається в режимі вставки. В режимі заміни, пов'язані з self-insert, замінюють текст у позиції курсора, а не зсувають його вправо. Символи, пов'язані з backward-delete-char, замінюють символ перед курсором на пропуск. Типово ця команда не зв’язана.
Вбивання та висмикування¶
- kill-line (C-k)
- Вбити текст від точки до кінця рядка.
- backward-kill-line (C-x Rubout)
- Вбити текст назад до початку рядка.
- unix-line-discard (C-u)
- Вбити назад від точки до початку рядка. Вбитий текст зберігається в кільці вбитого.
- kill-whole-line
- Зачистити усі символи у поточному рядку без зв'язку з позицією.
- kill-word (M-d)
- Вбити від точки до кінця поточного слова, або якщо між словами, до кінця наступного слова. Межі слів такі ж самі, як в forward-word.
- backward-kill-word (M-Rubout)
- Зачистити слово за позицією. Межі слів є тими самими, які використовуються backward-word.
- shell-kill-word
- Вбити від точки до кінця поточного слова, або якщо між словами, до кінця наступного слова. Межі слів такі ж самі, як в shell-forward-word.
- shell-backward-kill-word
- Зачистити слово за позицією. Межі слів є тими самими, які використовуються shell-backward-word.
- unix-word-rubout (C-w)
- Зачистити слово за позицією, використовуючи пробіл як можу слова. Зачищений текст буде збережено у кільці зачищення.
- unix-filename-rubout
- Вбити слово за точкою, використовуючи пробіл та символ похилої, як межі слів. Вбитий текст зберігається у кільці вбитого.
- delete-horizontal-space (M-\)
- Вилучити усі пробіли і табуляції навколо позиції.
- kill-region
- Зачистити текст у поточній області.
- copy-region-as-kill
- Копіювати текст до області, щоб зачистити буфер.
- copy-backward-word
- Копіювати слово до позиції до буфера зачищення. Межі слова є тими самими, що і для backward-word.
- copy-forward-word
- Копіювати слово після позиції до буфера зачищення. Межі слова є тими самими, що і для forward-word.
- yank (C-y)
- Висмикнути верхівку кільця вбитого в буфер на точці.
- yank-pop (M-y)
- Повернути кільце вбитого, і висмикнути нову верхівку. Працює лише після yank або yank-pop.
Числові аргументи¶
- digit-argument (M-0, M-1, ..., M--)
- Додати цю цифру до аргументу, що вже збирається, або почати новий аргумент. M-- починає негативний аргумент.
- universal-argument
- Це інший спосіб вказати аргумент. Якщо після цієї команди вказано одну або декілька цифр, можливо, разом із початковим знаком «мінус», ці цифри визначать аргумент. Якщо після команди вказано цифри, повторне виконання universal-argument завершує числовий аргумент, інакше буде проігноровано. У особливому випадку, якщо за цією командою одразу вказано символ, який не є ні цифрою, ні знаком «мінус», лічильник аргументу для наступної команди буде помножено на чотири. Початковим значенням лічильника аргументу є одиниця, тому виконання цієї функції уперше збільшує лічильник до чотирьох, наступне виконання — до шістнадцяти, тощо.
Доповнення¶
- complete (TAB)
- Спробувати виконати доповнення тексту перед позицією. Bash спробує виконати доповнення, користуючись текстом як змінною (якщо текст починається з $), іменем користувача (якщо текст починається з ~), назвою вузла (якщо текст починається з @) або командою (включно з альтернативами та функціями) послідовно. Якщо нічого не буде знайдено, буде виконано спробу доповнення за назвою файла.
- possible-completions (M-?)
- Список можливих доповнень тексту до позиції.
- insert-completions (M-*)
- Вставити усі доповнення тексту перед позицією, які могло б бути створено possible-completions.
- Подібно до complete, але замінює слово для доповнення єдиним відповідником зі списку можливих доповнень. Повторне виконання menu-complete крокує через список можливих доповнень, вставляючи кожен відповідник по черзі. В кінці списку доповнень, дзвенить дзвоник (контрольовано параметром bell-style) та відновлюється початковий текст. Аргумент n пересуває n позицій вперед в списку відповідників; можна використати негативний аргумент для пересування назад по списку. Ця команда призначена бути прив'язаною до TAB, але є типово неприв'язаною.
- Ідентично до menu-complete, але пересуває назад через список можливих доповнень, як ніби menu-complete було надано негативний аргумент. Ця команда є типово неприв'язаною.
- delete-char-or-list
- Вилучає символ під курсором, якщо він не на початку або в кінці рядка (як delete-char). Якщо в кінці рядка, поводиться ідентично до possible-completions. Ця команда типово неприв'язана.
- complete-filename (M-/)
- Спробувати доповнити назву файла за текстом до позиції.
- possible-filename-completions (C-x /)
- Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст назвою файла.
- complete-username (M-~)
- Спробувати доповнити ім'я користувача за текстом до позиції.
- possible-username-completions (C-x ~)
- Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст іменем користувача.
- complete-variable (M-$)
- Спробувати доповнити змінну оболонки за текстом до позиції.
- possible-variable-completions (C-x $)
- Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст змінної оболонки.
- complete-hostname (M-@)
- Спробувати доповнити назву вузла за текстом до позиції.
- possible-hostname-completions (C-x @)
- Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст назвою вузла.
- complete-command (M-!)
- Спробувати доповнення на тексті перед точкою, розглядаючи її, як назву команди. Доповнення команди намагається знайти відповідник тексту між псевдонімами, зарезервованими словами, функціями оболонки, вбудованими елементами оболонки, та, зрештою, назвами виконуваних файлів, в саме такому порядку.
- possible-command-completions (C-x !)
- Вивести можливі варіанти доповнення тексту до позиції, вважаючи текст назвою команди.
- dynamic-complete-history (M-TAB)
- Спробувати доповнення на тексті перед точкою, порівнюючи текст з рядками зі списку журналу щодо потенційних відповідників доповнення.
- dabbrev-expand
- Спробувати доповнення меню на тексті перед точкою, порівнюючи текст з рядками зі списку журналу щодо потенційних відповідників доповнення.
- complete-into-braces (M-{)
- Виконати доповнення назви файла і вставити список можливих доповнень у фігурних дужках так, щоб список став доступним оболонці (див. Розгортання у дужках вище).
Макроси клавіатури¶
- start-kbd-macro (C-x ()
- Почати збереження введених символів до поточного макросу клавіатури.
- end-kbd-macro (C-x ))
- Зупинити збереження введених символів до поточного макросу клавіатури і зберегти визначення.
- call-last-kbd-macro (C-x e)
- Повторно виконати останній визначений макрос клавіатури, надіславши символи макроса так, наче їх було введено з клавіатури.
- print-last-kbd-macro ()
- Вивести останній макрос клавіатури, визначений у форматі, який можна використати у файлі inputrc.
Різне¶
- re-read-init-file (C-x C-r)
- Прочитати вміст файла inputrc і включити усі прив'язки або визначення змінних, які там буде знайдено.
- abort (C-g)
- Перервати виконання поточної команди редагування і відтворити гудок термінала (який встановлюється параметром bell-style).
- do-lowercase-version (M-A, M-B, M-x, ...)
- Якщо метафікований символ x є символом верхнього регістру, виконати команду, яку пов'язано із відповідним метафікованим символом нижнього регістру. Поведінку не визначено, якщо x вже є символом нижнього регістру.
- prefix-meta (ESC)
- Метафікувати наступний введений символ. ESC f є тим самим, що і Meta-f.
- undo (C-_, C-x C-u)
- Нарощувальне скасування дій, яке окремо записується для кожного рядка.
- revert-line (M-r)
- Скасувати усі зміни, які було внесено до цього рядка. Результат буде подібним до виконання команди undo достатню для повернення рядка до початкового стану кількість разів.
- tilde-expand (M-&)
- Виконати тильда-розгортання для поточного слова.
- set-mark (C-@, M-<пропуск>)
- Встановити позначку у позицію. Якщо вказано числовий аргумент, буде встановлено позначку у відповідній числовій позиції.
- exchange-point-and-mark (C-x C-x)
- Поміняти місцями позиці і позначку. Для поточної позиції курсора буде встановлено збережену позицію, а попередню позицію курсора буде збережено як позначку.
- character-search (C-])
- Буде прочитано символ, після чого позицію буде пересунуто до наступного входження цього символу. Використання від'ємного значення аргументу призведе до переходу до попередніх входжень.
- character-search-backward (M-C-])
- Буде прочитано символ, після чого позицію буде пересунуто до попереднього входження цього символу. Використання від'ємного значення аргументу призведе до переходу до наступних входжень.
- skip-csi-sequence
- Прочитати достатньо символів для складання багатоклавішної послідовності, подібної до тієї, яку визначено для клавіш, подібних до Home і End. Такі послідовності починаються з індикатора керівної послідовності (CSI), зазвичай, ESC-[. Якщо цю послідовність прив'язано до "\[", клавіші, з яких складаються такі послідовності не працюватимуть, якщо їх не пов'язано явно із командою readline, — не вставлятимуть символи клавіш до буфера редагування. Типово, не прив'язано, але, зазвичай, прив'язують до ESC-[.
- insert-comment (M-#)
- Без числового аргументу на початку поточного рядка буде вставлено значення змінної readline comment-begin. Якщо вказано числовий аргумент, ця команда працюватиме як перемикач: якщо символи на початку рядка не збігаються зі значенням comment-begin, буде вставлено це значення, в іншому ж випадку, символи comment-begin буде вилучено з початку рядка. В обох випадках рядок буде прийнято так, наче було вставлено символ нового рядка. За типового значення comment-begin ця команда перетворює поточний рядок на коментар оболонки. Якщо у результаті застосування числового аргументу символ коментування буде вилучено, рядок буде виконано командною оболонкою.
- spell-correct-word (C-x s)
- Виконати виправлення у поточному слові, вважаючи його назвою каталогу або файла, у той самий спосіб, що і для параметра оболонки cdspell. Межі слів є тими самими, що використовуються у shell-forward-word.
- glob-complete-word (M-g)
- Слово перед позицією буде оброблено як взірець для розгортання шляху з неявним додаванням зірочки наприкінці. Цей взірець буде використано для створення списку відповідних назв файлів для можливого доповнення.
- glob-expand-word (C-x *)
- Слово перед позицією буде оброблено як взірець для розгортання шляху. Буде вставлено список відповідних назв файлів із заміною слова. Якщо буде передано числовий аргумент, перед розгортанням шляху до слова буде неявним чином дописано зірочку наприкінці.
- glob-list-expansions (C-x g)
- Буде показано список розгортань, які було б створено за допомогою glob-expand-word і перемальовано рядок. Якщо буде передано числовий аргумент, перед розгортанням шляху до слова буде неявним чином дописано зірочку наприкінці.
- dump-functions
- Вивести усі функції та їхні прив'язки до комбінацій клавіш до потоку виведення readline. Якщо вказано числовий аргумент, виведені дані буде форматовано так, щоб їх можна було зробити частиною файла inputrc.
- dump-variables
- Вивести усі придатні до встановлення змінні readline та їхні значення до потоку виведення readline. Якщо вказано числовий аргумент, виведені дані буде форматовано так, щоб їх можна було зробити частиною файла inputrc.
- dump-macros
- Вивести усі послідовності клавіш readline, які пов'язано із макросами та рядки, які вони виводять. Якщо вказано числовий аргумент, виведення буде форматовано таким чином, щоб його можна було зробити частиною файла inputrc.
- display-shell-version (C-x C-v)
- Вивести дані щодо версії для поточного екземпляра bash.
Запрограмоване доповнення¶
Якщо буде здійснено спробу доповнення слова для аргументу команди, для якої специфікацію доповнення (compspec) було визначено з використанням вбудованої команди complete (див. ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ нижче), буде викликано можливості програмованого доповнення.
Спочатку, буде визначено назву команди. Якщо слово команди є порожнім рядком (спробу доповнення виконано на початку порожнього рядка), буде використано будь-які compspec, які визначено за допомогою параметра -E команди complete. Якщо для команди визначено compspec, цей compspec буде використано для створення списку можливих доповнень слова. Якщо словом команди є повна назва шляху, спочатку буде виконано пошук compspec для повної назви шляху. Якщо для повної назви шляху не буде знайдено compspec, буде виконано спробу знайти compspec для частини, яка слідує за кінцевим символом похилої риски. Якщо ці пошуки не дадуть результату у формі compspec, типово, буде використано будь-який compspec, який визначено за допомогою параметра -D команди complete. Якщо типового compspec немає, bash спробує розгортання альтернатив для слова команди, як остаточний резервний варіант, і спробує знайти compspec для слова команди за будь-яким успішним розгортанням.
Щойно буде знайдено compspec, його буде використано для побудови списку відповідних слів. Якщо compspec не буде знайдено, буде виконано звичайне доповнення bash, яке описано вище у розділі Доповнення.
Спочатку, буде використано дії, які визначено compspec. Повернуто буде лише відповідники, префіксом яких є слово, яке доповнюють. Якщо для доповнення назв файлів або каталогів використано параметр -f або -d, для фільтрування відповідників буде використано значення змінної оболонки FIGNORE.
Далі буде створено усі доповнення, які задано взірцем розгортання шляхів для параметра -G. Створені за взірцем слова не обов'язково повинні збігатися зі словом, яке доповнюють. Для фільтрування відповідників не буде використано змінну середовища GLOBIGNORE, але буде використано змінну середовища FIGNORE.
Далі, буде розглянуто рядок, який задано як аргумент параметра -W. Спочатку, рядок буде поділено на слова з використанням символів в особливій змінній IFS, як роздільників. Буде також взято до уваги нейтралізацію символів в оболонці. Потім кожне слово буде розгорнуто з використання розгортання у фігурних дужках, розгортання тильди, розгортання параметрів і змінних, заміни команд та арифметичних обчислень, які описано вище у розділі РОЗГОРТАННЯ. Результати буде поділено за правилами, які описано вище у розділі Поділ на слова. Відповідність результатів слову, яке доповнюють, буде встановлено з використанням доповнюваного слова як префікса. Відповідні слова стануть можливими варіантами доповнення.
Після того, як ці збіги згенеровано, викликається будь-яка функція оболонки або команда з параметрами -F та -C. Коли команда або функція викликається, змінні COMP_LINE, COMP_POINT, COMP_KEY і COMP_TYPE отримують значення, як описано вище в розділі Змінні оболонки. Якщо викликається функція оболонки, встановлюються також змінні COMP_WORDS і COMP_CWORD. Під час виклику функції або команди, першим аргументом ($1) є назва команди, аргументи якої доповнюються, другий аргумент ($2) — це слово, яке доповнюється, а третій аргумент ($3) — це слово, що передує в поточному командному рядку слову, яке доповнюється. Фільтрування згенерованих доповнень за доповнюваним словом не виконується; функція або команда має повну свободу щодо генерування збігів.
Першою буде виконано будь-яку функцію, яку вказано за допомогою -F. Функція може використовувати усі можливості оболонки, зокрема вбудовану команду compgen, яку описано нижче, для створення відповідників. Функція має записувати усі можливі варіанти доповнень до змінної-масиву COMPREPLY, по одному варіанту на елемент масиву.
Далі, буде викликано будь-яку команду, яку вказано за допомогою параметра -C, у середовищі, яке є еквівалентним до заміни команди. Команда має вивести список доповнень, по одному на рядок, до стандартного виведення. Для екранування символу нового рядка, якщо потрібно, можна скористатися символом зворотної похилої риски.
Після створення всіх можливих доповнень, до списку буде застосовано будь-який фільтр, визначений з параметром -X. Фільтр - це шаблон, який використовується для розujhnfння шляху; & в шаблоні замінюється текстом слова, що доповнюється. Літерал & можна екранувати за допомогою зворотної похилої риски; вона видаляється перед випробуванням збігу. Будь-яке доповнення, яке відповідає шаблону, буде вилучено зі списку. Початковий ! заперечує шаблон; у цьому випадку буде видалено будь-яке доповнення, що не відповідає шаблону. Якщо ввімкнено параметр оболонки nocasematch, відповідність перевіряється без урахування регістру букв.
Нарешті, будь-який префікс і суфікс, зазначені параметрами -P і -S, додаються до кожного члена списку доповнення, а результат повертається до коду доповнення readline як список можливих доповнень.
Якщо раніше застосовані дії не створять жодного відповідника, і було передано параметр -o dirnames команди complete при визначенні compspec, буде виконано спробу доповнення назви каталогу.
Якщо при визначенні compspec команді complete було передано параметр -o plusdirs, буде виконано спробу доповнення назви каталогу, а усі відповідники буде додано до результатів інших дій.
Типово, якщо знайдено compspec, усі створені за ним результати буде повернуто до коду доповнення як повний набір можливих доповнень. Спроби скористатися типовими доповненням bash виконано не буде, а типове доповнення назв файлів для readline буде вимкнено. Якщо вказано параметр -o bashdefault команди complete при визначенні compspec, буде виконано спробу скористатися типовими доповненнями bash, якщо compspec не дає ніяких відповідників. Якщо вказано параметр -o default команди complete при визначенні compspec, буде використано типові доповнення readline, якщо compspec (і, якщо зроблено спробу, типові доповнення bash) не дає жодного відповідника.
Якщо compspec вказує, що бажаним є доповнення назви каталогу, програмовані функції доповнення примусять readline дописати символ похилої риски наприкінці доповнених назв, які є символічними посиланням на каталоги з використанням значення змінної readline mark-directories, незалежно від значення змінної readline mark-symlinked-directories.
Є деяка підтримка динамічної модифікації доповнення. Це корисно, якщо застосовується в поєднанні із типовим доповненням, зазначеним у complete -D. Функції оболонки, що виконуються як обробники доповнення, можуть вказувати, що доповнення слід повторити, повернувши статус виходу 124. Якщо функція оболонки повертає 124 і змінює compspec, пов’язаний з командою, для якої виконується спроба доповнення (подається як перший аргумент, коли функція виконується), програмоване доповнення перезапускається з початку зі спробою знайти новий compspec для цієї команди. Це дозволяє динамічно будувати набір доповнень у міру спроб доповнення, а не завантажувати всі одночасно.
Наприклад, якщо припустити, що існує бібліотека compspec, кожна з яких зберігається у файлі, що відповідає назві команди, така функція доповнення типово завантажуватиме доповнення динамічно:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null
2>&1 && return 124
}
complete -D -F _completion_loader -o bashdefault -o
default
ЖУРНАЛ¶
Якщо увімкнено параметр -o history вбудованої команди set, оболонка надає доступ до журналу команд, - списку команд, уведених раніше. Значення змінної HISTSIZE визначає кількість команд для збереження в списку журналу. Зберігається текст останніх HISTSIZE команд (типово - 500). Оболонка зберігає кожну команду в списку журналу перед розширенням параметрів і змінних (див. вище РОЗШИРЕННЯ), але після розгортання за журналом, залежно від значень змінних оболонки HISTIGNORE та HISTCONTROL.
Під час запуску історія ініціалізується з файлу, назву якого записано в змінній HISTFILE (типово ~/.bash_history). Файл, названий за значенням HISTFILE обрізається, якщо необхідно, щоб кількість рядків у ньому не перевищувала значення змінної HISTFILESIZE. Якщо значення змінної HISTFILESIZE не встановлено, або встановлено в null, нечислове чи від'ємне числове значення, файл журналу не обрізається. Коли читається файл журналу, рядки, що починаються з символу коментаря журналу, за яким зразу слідує цифра, інтерпретуються як позначки часу для наступного рядка журналу. Ці позначки часу виводяться за бажанням, залежно від значення змінної HISTTIMEFORMAT. Під час виходу з оболонки з увімкненою історією останні $HISTSIZE рядків копіюються зі списку журналу до $HISTFILE. Якщо увімкнено параметр оболонки histappend (див. опис shopt нижче в SHELL BUILTIN COMMANDS), рядки додаються до файлу журналу, інакше файл журналу перезаписується. Якщо значення HISTFILE скасовано, або якщо файл журналу недоступний для запису, історія не зберігається. Якщо встановлено змінну HISTTIMEFORMAT, позначки часу записуються до файлу журналу і позначаються символом коментаря журналу, тому вони можуть зберігатися під час сеансів оболонки. Тут символ коментаря журналу дозволяє відрізнити позначки часу від інших рядків журналу. Після збереження журналу файл журналу обрізається, щоб містити не більше ніж HISTFILESIZE рядків. Якщо значення HISTFILESIZE не встановлено, або встановлено в null, нечислове чи від'ємне числове значення, файл журналу не обрізається.
Вбудовану команду fc (див. нижче SHELL BUILTIN COMMANDS) можна використати для показу або редагування та повторного виконання частини списку журналу. Вбудовану команду history можна використати для показу або змінення списку журналу та керування файлом журналу. При використанні редагування командного рядка, в кожному режимі редагування, який надає доступ до списку журналу, доступні команди пошуку.
Оболонка дозволяє керувати тим, які команди зберігаються в списку журналу. Змінні HISTCONTROL і HISTIGNORE може налаштувати так, щоб оболонка зберігала лише пеану підмножину введених команд. Якщо увімкнено параметр оболонки cmdhist, він змушує оболонку намагатися зберегти кожен рядок багаторядкової команди в одному записі журналу, додаючи крапку з комою, де необхідно, щоб зберегти синтаксичну правильність. Параметр оболонки lithist змушує оболонку зберігати команду зі вставленими розривами рядків замість крапки з комою. Щоб дізнатись про налаштування та скасування параметрів оболонки, див. нижче опис вбудованої команди shopt під заголовком ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ.
ДОПОВНЕННЯ ЗА ЖУРНАЛОМ¶
Оболонка підтримує функцію розгортання за журналом, подібну до розгортання за журналом в csh. У цьому розділі описано доступні синтаксичні засоби. Цю функцію типово увімкнено для інтерактивних оболонок і можна вимкнути за допомогою параметру +H вбудованої команди set (див. нижче ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ). Неінтерактивні оболонки типово не виконують розширення журналу.
Розширення журналу вводить слова зі списку журналу у вхідний потік, що дозволяє легко повторювати команди, вставляти аргументи попередньої команди в поточний рядок уведення або швидко виправляти помилки в попередніх командах.
Розгортання за журналом виконується відразу після прочитання повного рядка, до того, як оболонка розбиває його на слова, і виконується для кожного рядка окремо без урахування цитат у попередніх рядках. Воно відбувається у два етапи. Перший – визначення, який рядок зі списку журналу використовувати під час заміни. Другий — вибір частини цього рядка для включення до поточного. Рядок, вибраний з журналу, — це подія, а частини цього рядка, на які діють, — слова. Для керування словами доступні різні модифікатори. Рядок розбивається на слова так само, як і під час читання введених даних, так що кілька слів, розділених метасимволами, вкладених у лапки, вважаються одним словом. Розширення журналу вводяться через появу символу розгортання за журналом, яким типово є !. Лише зворотна коса риска (\) і одинарні лапки можуть містити символ розгортання за журналом, але символ розгортання за журналом також розглядається як лапки, якщо він безпосередньо передує закритим подвійним лапкам у рядку в подвійних лапках.
Деякі символи блокують розгортання журналу, якщо з'являються зразу після символу розгортання за журналом, навіть якщо він не в лапках: пропуск, табуляція, новий рядок, повернення каретки та =. Якщо встановлено параметр оболонки extglob, ( також блокуватиме розгортання.
Для коригування поведінки розгортання за журналом можна скористатися декількома параметрами оболонки із вбудованою командою shopt. Якщо увімкнено параметр оболонки histverify (див. опис вбудованої команди shopt нижче) і використано readline, заміни за журналом не буде негайно передано обробнику оболонки. Замість цього, розгорнутий рядок буде перезавантажено до буфера редагування readline для подальшого внесення змін. Якщо використано readline і увімкнено параметр оболонки histreedit, невдалу заміну за журналом буде перезавантажено до буфера редагування readline для виправлення. Параметром -p вбудованої команди history можна скористатися для перегляду того, якими будуть результати доповнення за журналом, перш ніж ви ним скористаєтеся. Параметром -s вбудованої команди history можна скористатися для додавання команд наприкінці списку журналу без їхнього виконання, так, щоб ними можна було згодом скористатися, викликавши повторно.
Оболонка уможливлює керування різноманітними символами, які використовує механізм розгортання за журналом (див. опис histchars вище у розділі Змінні оболонки). Оболонка використовує символ коментування у журналі для створення часових позначок при записі файла журналу.
Показник подій¶
Показник подій - це посилання на запис командного рядка в списку журналу. Якщо посилання не абсолютне, події є відносними до поточної позиції в списку журналу.
- !
- Розпочати заміну за журналом, якщо далі не вказано пропуск, символ нового рядка, символ повернення каретки, = або ( (якщо увімкнено параметр оболонки extglob за допомогою вбудованої команди shopt).
- !n
- Посилання на рядок команди n.
- !-n
- Посилання на поточну команду мінус n.
- !!
- Посилання на попередню команду. Синонім «!-1».
- !рядок
- Вказує на найсвіжішу команду, яка передує поточній позиції у списку журналу і починається з рядка рядок.
- !?рядок[?]
- Вказує на найсвіжішу команду, яка передує поточній позиції у списку журналу і починається з рядка рядок. Кінцевий ? можна не вказувати, якщо після рядка одразу йде символ нового рядка. Якщо рядок не вказано, буде використано рядок з найсвіжішого пошуку. Якщо попереднього рядка пошуку не існує, буде повідомлено про помилку.
- ^рядок1^рядок2^
- Швидке підставляння. Повторити попередню команду, замінивши рядок1 на рядок2. Еквівалент “!!:s^рядок1^рядок2^” (див. Модифікатори нижче).
- !#
- Увесь рядок команди, який уже введено.
Показники слів¶
Вказівники слів використовують для вибору бажаних слів з події. : відокремлює специфікацію події від вказівника слів. Двокрапку можна пропустити, якщо вказівник слова починається з ^, $, *, - або %. Слова нумерують з початку рядка. Перше слово матиме номер 0 (нуль). Слова буде вставлено до поточного рядка із відокремленням одинарним пробілом.
- 0 (нуль)
- Нульове слово. Для оболонки це слово команди.
- n
- n-е слово.
- ^
- Перший аргумент. Тобто, слово 1.
- $
- Останнє слово. Зазвичай, це останній аргумент, але його буде розгорнуто до нульового слова, якщо у рядку буде лише одне слово.
- %
- Перше слово, знайдене за останнім пошуком `?рядок?', якщо рядок пошуку починається із символу, який є частиною слова.
- x-y
- Діапазон слів; «-y» — скорочення «0-y».
- *
- Усі слова, окрім нульового. Синонім до «1-$». Не є помилкою використання *, якщо у події точно одне слово — у такому випадку буде повернуто порожній рядок.
- x*
- Скорочення від x-$.
- x-
- Скорочення x-$, подібно до x*, але пропускає останнє слово. Якщо не вказано x, типовим значенням є 0.
Якщо вказано слово-визначення без специфікації події, як подію буде використано попередню команду.
Модифікатори¶
Після необов'язкового вказівника слова може бути послідовність одного або декількох наступних модифікаторів, перед кожним з яких має бути «:». Модифікатори модифікують або змінюють слово або слова, які вибрано з події журналу.
- h
- Вилучити кінцевий компонент назви файла, лишивши лише початок.
- t
- Вилучити усі початкові компоненти назви файла, лишивши лише кінець.
- r
- Вилучити кінцевий суфікс у формі .xxx, лишивши лише основну назву.
- e
- Вилучити усе, окрім завершального суфікса.
- p
- Вивести нову команду, але не виконувати її.
- q
- Нейтралізувати підставлені слова, екрануючи подальші підставлення.
- x
- Нейтралізувати замінені слова, як з q, але з поділом на слова за пропусками або символами нового рядка. Модифікатори q і x є взаємно виключними; буде використано лише останній з використаних.
- s/старий/новий/
- Замінити на новий перше входження запису старий у рядку події. Можна скористатися будь-яким символом як роздільником замість /. Кінцевий роздільник є необов'язковим, якщо він є останнім символом у рядку події. Роздільник можна нейтралізувати у записах старий і новий одинарним символом зворотної похилої риски. Якщо у записі новий використано &, його буде замінено на запис старий. Одинарний символ зворотної похилої риски нейтралізуватиме &. Якщо запис старий є порожнім, для нього буде встановлено останній замінений запис старий або, якщо попередніх замінників за журналом немає, останній рядок у пошуку !?рядок[?]. Якщо запис новий є порожнім, буде вилучено усі відповідні записи старий.
- &
- Повторити попередню підстановку.
- g
- Спричиняє застосування змін до усього рядка події. Використовують у поєднанні із «:s» (наприклад, «:gs/старий/новий/») або «:&». Якщо використано з «:s», можна скористатися будь-яким роздільником замість /, а кінцевий роздільник є необов'язковим, якщо він є останнім символом рядка події. a можна скористатися як синонімом g.
- G
- Застосувати наступний модифікатор «s» або «&» один раз до кожного слова у рядку подій.
ВБУДОВАНІ КОМАНДИ ОБОЛОНКИ¶
Якщо не зазначено інакше, кожна вбудована команда, яку документовано у цьому розділі як таку, що приймає параметри із початковим -, приймає -- для позначення завершення параметрів. Вбудовані команди :, true, false і test/[ не приймають параметрів і не використовують -- в особливий спосіб. Вбудовані команди exit, logout, return, break, continue, let і shift приймають і обробляють аргументи, які починаються на -, без потреби у кінцевому --. Інші вбудовані команди, які приймають аргументи, але які не вказано як так, що приймають параметри, обробляють аргументи, що починаються з -, як некоректні параметри, і потребують -- для запобігання такій обробці.
- : [аргументи]
- Ні на що не впливає; команда нічого не робить, окрім розгортання аргументів і виконання будь-яких вказаних переспрямувань. Стан повернення є нульовим.
-
. назва_файла [аргументи] - source назва_файла [аргументи]
- Прочитати і виконати команди з файла назва_файла у поточному середовищі оболонки і повернути стан виходу останньої виконаної команди з файла назва_файла. Якщо у записі назва_файла не міститься символу похилої риски, для пошуку каталогу, який містить файл назва_файла, але назва_файла не обов'язково має бути виконуваним файлом, буде використано змінну середовища PATH. Файл, пошук якого буде виконано у PATH, має бути виконуваним. Якщо bash працює не у режимі posix, буде виконано пошук у поточному каталозі, якщо у каталогах PATH нічого не буде знайдено. Якщо у вбудованій команді shopt вимкнено параметр sourcepath, пошук у PATH не відбуватиметься. Якщо вказано будь-які аргументи, вони стануть позиційними параметрами при виконанні файла назва_файла. Якщо аргументи не вказано, позиційні параметри лишаться незмінними. Якщо увімкнено параметр -T, . успадкує усі пастки у DEBUG; якщо параметр не увімкнено, рядок пасток DEBUG буде збережено і відновлено після виклику ., а . скасує пастки DEBUG на час виконання. Якщо -T не встановлено, а обробленим файлом буде змінено пастку DEBUG, нове значення лишиться чинним після завершення виконання .. Повернутим станом буде стан виходу останньої команди у скрипті (0, якщо не було виконано жодної команди) і «хибність», якщо файл назва_файла не було знайдено або не вдалося його прочитати.
- alias [-p] [назва[=значення] ...]
- Alias без аргументів або з параметром -p виводить список альтернатив у формі alias назва=значення до стандартного виведення. Якщо вказано аргументи, альтернативу буде визначено для кожної назви, для якої вказано значення. Якщо у значенні є кінцевий пробіл, наступне слово для перевірки на заміну альтернатив при розгортанні альтернативи. Для кожної назви у списку аргументів, для якого не вказано значення, буде виведено назву і значення альтернативи. Alias повертає «істину», якщо вказано назви, для яких визначено альтернативи.
- bg [спец_завдання ...]
- Відновити усі призупинені завдання специфікація_завдання у фоновому режимі, так, наче їх було запущено з &. Якщо специфікація_завдання не вказано, буде використано дані оболонки щодо поточного завдання. bg специфікація_завдання повертає 0, якщо запущено керування завданнями, якщо запущено із керуванням завданнями, не буде виявлено якогось завдання із вказаною специфікацією_завдання, і не буде виявлено завдання, яке запущено без керування завданнями.
- bind [-m прив'язка_клавіш] [-lpsvPSVX]
- bind [-m прив'язка_клавіш] [-q функція] [-u функція] [-r послідовність_клавіш]
- bind [-m прив'язка_клавіш] -f назва_файла
- bind [-m прив'язка_клавіш] -x послідовність_клавіш:команда_оболонки
- bind [-m прив'язка_клавіш] послідовність_клавіш:назва_функції
- bind [-m прив'язка_клавіш] послідовність_клавіш:команда_readline
- bind командний-рядок-readline
- Вивести поточні прив'язки клавіш до функцій у readline, пов'язати послідовність клавіш із функцією або макросом readline або встановити значення змінної readline. Кожне аргумент, який не є параметром, буде командою у форматі, який використовують у файлі ініціалізації readline, зокрема .inputrc, але кожну прив'язку або прив'язку слід передавати як окремий аргумент. Приклад: '"\C-x\C-r": re-read-init-file'. Параметри, якщо їх вказано, мають такі призначення:
- -m прив'язка_клавіш
- Скористатися прив'язкою_клавіш як прив'язкою клавіш, яка буде чинною для внесення змін у формі наступних прив'язок. Прийнятними назвами прив'язок_клавіш є emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command та vi-insert. vi є еквівалентом vi-command (vi-move також є синонімом); emacs є еквівалентом emacs-standard.
- -l
- Показати список всіх функцій readline.
- -p
- Показати функції readline та прив'язки таким чином, щоб їх можна було знову прочитати.
- -P
- Показати список назв поточних функцій readline та прив'язок.
- -s
- Показати прив'язки послідовностей клавіш readline до макросів та рядків, які вони виводять у такий спосіб, щоб їх можна було повторно прочитати.
- -S
- Показати прив'язки послідовностей клавіш readline до макросів та рядків, які вони виводять.
- -v
- Показати змінну readline та значення таким чином, щоб їх можна було знову прочитати.
- -V
- Показати список назв змінних readline та їхніх значень.
- -f назва_файла
- Прочитати прив'язки клавіш з файла назва_файла.
- -q функція
- Зробити запит про те, які клавіші викликають іменований function.
- -u функція
- Відв'язати всі клавіші, прив'язані до іменованого function.
- -r посл_клавіш
- Вилучити будь-які поточні прив'язки для keyseq.
- -x посл_клавіш:команда-оболонки
- Робить так, що при введенні послідовності клавіш посл_клавіш буде виконано команду-оболонки. При виконанні команди-оболонки оболонка встановлює для змінної READLINE_LINE значення вмісту буфера рядків readline, для змінних READLINE_POINT та READLINE_MARK значення поточного місця позиції вставлення та збереженої позиції вставлення (позначки), відповідно. Оболонка надає будь-який визначений користувачем числовий аргумент змінній READLINE_ARGUMENT. Якщо аргументу немає, змінна лишається невстановленою. Якщо виконана команда змінює значення будь-якої зі змінних READLINE_LINE, READLINE_POINT або READLINE_MARK, ці нові значення буде відтворено у стані редагування.
- -X
- Вивести усі послідовності клавіш, які пов'язано із командами оболонки, та пов'язані команди у форматі, яким можна скористатися як вхідними даними.
Буде повернуто значення 0, якщо не використано нерозпізнаного параметра або не сталося помилки.
- break [n]
- Вийти з циклу for, while, until або select. Якщо вказано n, перервати n рівнів. n має бути ≥ 1. Якщо n перевищує кількість вкладених циклів, буде здійснено вихід з усіх циклів. Повернутим значенням буде 0, якщо n є більшим або рівним 1.
- builtin вбудована-команда-оболонки [аргументи]
- Виконати вказану вбудовану команду оболонки, передавши їй аргументи, і повернути її стан виходу. Корисно при визначенні функції, чия назва є такою самою, як вбудована команда оболонки, зі збереженням функціональних можливостей вбудованої команди у самій функції. У такий спосіб типово перевизначають вбудовану команду cd. Повернутим станом є «хибність», якщо не існує команди вбудована-команда-оболонки.
- caller [вираз]
- Повертає контекст будь-якого активного виклику підпрограми (функції оболонки або скрипту, яку виконано за допомогою вбудованих команд . або source). Без зазначення виразу, caller виводить номер рядка і назву файла початкового коду поточного виклику підпрограми. Якщо як вираз використано додатне ціле число, caller виведе номер рядка, назву підпрограми та файл початкового коду, що відповідає відповідній позиції у поточному стосі викликів щодо виконання. Цими додатковими відомостями можна скористатися, наприклад, для виведення трасування стека. Поточний кадр є кадром із номером 0. Повернутим значенням є 0, якщо оболонка виконує виклик підпрограми і вираз відповідає коректній позиції у стосі викликів.
- cd [-L|[-P [-e]] [-@]] [каталог]
- Змінює поточний каталог на dir. Якщо dir не задано, значення використовується значення змінної оболонки HOME. Змінна CDPATH визначає шлях пошуку каталогу, що містить dir: у кожному каталозі з CDPATH шукається dir. Альтернативні назви каталогів у CDPATH відокремлюються двокрапкою (:). Відсутня назва каталогу в CDPATH означає поточний каталог, тобто, “.”. Якщо dir починається з косої риски (/), то CDPATH не використовується. Параметр -P змушує cd використовувати фізичну структуру каталогів, розв'язуючи символьні посилання під час проходження dir і перед обробкою екземплярів .. в dir (див. також параметр -P вбудованої команди set); параметр -L змушує слідувати за символьними посиланнями, розв’язуючи посилання після обробки екземплярів .. в dir. Якщо .. з'являється в dir, вони обробляються видаленням безпосередньо попереднього компонента шляху dir, поверненням до косої риски або початку dir. Якщо параметр -e задано з -P, і поточний робочий каталог не можна успішно визначити після успішної зміни каталогу, cd поверне статус невдачі. На системах, що підтримують параметр -@, він надає розширені атрибути, пов’язані з файлом, як каталогом. Аргумент - перетворюється на $OLDPWD перед спробою змінити каталог. Якщо використовується непорожня назва каталогу з CDPATH, або якщо - є першим аргументом, і зміна каталогу пройшла успішно, в стандартний вихід записується абсолютний шлях нового робочого каталогу. Якщо зміна каталогу буде успішною, cd встановлює значення для змінної середовища PWD значення адреси нового каталогу, а для змінної середовища OLDPWD встановлює значення адреси поточного робочого каталогу до зміни. Якщо каталог змінено успішно, повертається значення істина, а в іншому разі - хибність.
- команда [-pVv] команда [аргумент ...]
- Виконати команду із аргументами, придушивши звичайний пошук функцій оболонки. Буде виконано лише вбудовані команди або команди, які буде знайдено у каталогах PATH. Якщо вказано параметр -p, пошук команди буде виконано з використанням типового значення для PATH, що гарантує віднайдення усіх стандартних допоміжних програм. Якщо вказано параметр -V або -v, буде виведено опис команди. Якщо вказано параметр -v, буде показано одинарне слово, що вказує команду або назву файла, що використовується для виклику команди. Використання параметра -V призводить до виведення докладнішого опису. Якщо вказано параметр -V або -v, станом виходу буде 0, якщо команду було знайдено, і 1, якщо команду не було знайдено. Якщо не вказано жодного параметра, і станеться помилка або команди не вдасться знайти, станом виходу буде 127. В усіх інших випадках станом виходу вбудованої команди команда буде стан виходу команди.
- compgen [параметр] [слово]
- Створити
можливі
доповнення-відповідники
для слова,
відповідно
до
параметрів.
Параметрами
можуть
бути
будь-які
параметри,
які
приймає
вбудована
команда complete
за
винятком -p
і -r.
Відповідники
буде
записано
до
стандартного
виведення.
При
використанні
параметрів
-F і -C
різноманітні
змінні
оболонки,
встановлені
можливостями
з
програмованого
доповнення,
хоча і
будуть
доступними,
не
матимуть
придатних
до
використання
значень.
Відповідники буде створено у той самий спосіб, наче їх було безпосередньо створено на основі специфікації доповнення із тими самими прапорцями кодом програмованого доповнення. Якщо вказано слово, буде виведено лише ті доповнення, які є відповідними слову.
Повернутим значенням буде true, якщо не вказано некоректного параметра або не було створено жодної відповідності.
- complete [-abcdefgjksuv] [-o параметр-доповнення] [-DEI] [-A action] [-G заг_взірець] [-W список_слів]
-
[-F функція] [-C команда] [-X взірець_фільтрування] [-P префікс] [-S суфікс] назва [назва ...] - complete -pr [-DEI] [назва ...]
- Вказати, як
має бути
доповнено
аргументи
кожної із
назв. Якщо
вказано
параметр -p
або не
вказано
жодних
параметрів,
буде
виведено
наявні
специфікації
у спосіб,
який надає
змогу
повторно
використати
їх як
вхідні
дані.
Використання
параметра
-r призведе
до
вилучення
специфікації
доповнення
для кожної
з назв або,
якщо не
вказано
жодної
назви,
усіх
специфікацій
доповнення.
Використання
параметра
-D вказує
на тек, що
інші
вказані
параметри
і дії слід
застосувати
до
«типового»
(“default”)
доповнення
команд;
тобто
доповнення,
яке
використовуватиметься
для команд,
для яких
раніше не
було
визначено
доповнення.
Використання
параметра
-E вказує
на те, що
інші
вказані
параметри
та дії слід
застосувати
до
«порожнього»
(“empty”)
доповнення
команд;
тобто
доповнення,
яке
використовують
для
порожнього
рядка.
Параметр -I
вказує на
те, що інші
вказані
параметри
і дії слід
застосувати
до
доповнення
початкового
слова, яке
не є
встановленням
значення, у
рядку або
після
роздільника
команд,
зокрема ;
або |,
тобто,
зазвичай,
доповнення
назви
команди.
Якщо
вказано
декілька
параметрів,
-D має
вищий
пріоритет
за -E, а
обидва ці
параметри
мають
вищий
пріоритет
за -I. Якщо
вказано
будь-який з
параметрів
-D, -E або -I,
усі інші
аргументи
назва
буде
проігноровано;
ці
доповнення
застосовуватимуться
лише до
випадку,
який
вказано
параметром.
Процедуру застосування цих специфікацій доповнення при спробі доповнення слів описано вище у розділі above under Programmable Completion.
Інші параметри, якщо їх вказано, мають описані нижче призначення. Аргументи до параметрів -G, -W і -X (і, якщо потрібно, параметрів -P і -S) слід брати у лапки, щоб захистити їх від розгортання до виклику вбудованої команди complete.
- -o параметр-доповнення
- параметр-доповнення контролює декілька аспектів поведінки compspec поза простою генерацією доповнень. параметр-доповнення може бути одним з:
- bashdefault
- Виконати решту типових доповнень bash, якщо compspec не генерує жодних відповідників.
- default
- Використати типове доповнення назви файлу з readline, якщо compspec не генерує жодних відповідників.
- dirnames
- Виконати доповнення назви каталогу, якщо compspec не генерує жодних відповідників.
- filenames
- Повідомити readline, що назви файлів створює compspec, щоб уможливити будь-яку обробку, яка є специфічною до назв файлів (зокрема додавання символу похилої риски до назв каталогів, нейтралізацію спеціальних символів або придушення кінцевих пробілів). Призначено для використання у функціях оболонки.
- noquote
- Повідомити readline, що не слід брати у лапки завершені слова, якщо вони є назвами файлів (типово, назви файлів беруть у лапки).
- nosort
- Повідомити readline, що не слід упорядковувати список можливих завершень за абеткою.
- nospace
- Повідомити readline, що не слід дописувати пробіл (типова поведінка) до слів, які завершуються на кінці рядка.
- plusdirs
- Після створення усіх відповідників, які визначено compspec, буде виконано спробу доповнення назви каталогу. Усі знайдені відповідники буде додано до результатів інших дій.
- -A дія
- Для створення списку можливих завершень може бути використано одну з таких дій:
- alias
- Альтернативні назви. Також можна вказати як -a.
- arrayvar
- Назви змінних-масивів.
- binding
- Назви прив'язки клавіш у readline.
- builtin
- Назви вбудованих команд оболонки. Також можна вказати як -b.
- команда
- Назви команд. Також можна вказати як -c.
- directory
- Назви каталогів. Також можна вказати як -d.
- disabled
- Назви вимкнених вбудованих команд оболонки.
- enabled
- Назви увімкнених вбудованих команд оболонки.
- export
- Назви експортованих змінних оболонки. Можна також вказати як -e.
- файл
- Назви файлів. Також можна вказати як -f.
- function
- Назви функцій оболонки.
- group
- Назви груп. Також можна вказати як -g.
- helptopic
- Теми довідки, які приймає вбудована команда help.
- hostname
- Назви вузлів, як їх вказано у файлі, на який вказує змінна оболонки HOSTFILE.
- job
- Назви завдань, якщо активним є керування завданнями. Також можна вказати як -j.
- keyword
- Зарезервовані слова оболонки. Також можна вказати як -k.
- running
- Назви запущених завдань, якщо активним є керування завданнями.
- service
- Назви служб. Також можна вказати як -s.
- setopt
- Коректні аргументи до параметра -o вбудованої команди set.
- shopt
- Назви параметрів оболонки, які приймаються вбудованою командою shopt.
- signal
- Назви сигналів.
- stopped
- Назви зупинених завдань, якщо активним є керування завданнями.
- user
- Імена користувачів. Також можна вказати як -u.
- variable
- Назви усіх змінних оболонки. Можна також вказати як -v.
- -C команда
- Команду буде виконано у середовищі підоболонки, а її виведені дані буде використано як можливі варіанти завершення. Аргументи передають так само, як і для параметра -F.
- -F функція
- Функцію оболонки функція буде виконано у поточному середовищі оболонки. При виконанні функції першим аргументом ($1) буде назва команди, чиї аргументи слід доповнити, другим аргументом ($2) буде слово, яке слід доповнити, а третім аргументом ($3) буде слово, яке передує слову, яке слід доповнити, у поточному рядку команди. По завершенню обробки можливі доповнення буде отримано зі значення змінної-масиву COMPREPLY.
- -G заг_взірець
- Для створення варіантів можливих завершень буде розгорнуто взірець шляхів заг_взірець.
- -P префікс
- На початку усіх можливих завершень після застосування усіх інших параметрів буде дописано префікс.
- -S суфікс
- Наприкінці усіх можливих завершень після застосування усіх інших параметрів буде дописано суфікс.
- -W список_слів
- Список слів буде поділено з використанням символів у спеціальній змінній IFS як роздільників, а кожне отримане слово буде розгорнуто. У списку_слів буде використано нейтралізацію оболонки для забезпечення роботи механізму обробки слів, які містять метасимволи або символи оболонки, у значенні IFS. Можливими доповненнями є елементи списку-результату, який відповідає слову, пошук доповнення якого шукає оболонка.
- -X взірець_фільтрування
- взірець_фільтрування — взірець у форматі, який використовують для розгортання шляхів. Його буде застосовано до списку можливих доповнень, який створено попередніми параметрами та аргументами, а усі доповнення, які відповідають взірцю_фільтрування буде вилучено зі списку. Використання початкового ! у взірці_фільтрування призведе до обертання взірця. Таким чином, буде вилучено лише ті доповнення, які не збігаються із взірцем_фільтрування.
Повернутим значенням буде «істина», якщо не буде вказано некоректного параметра, не буде вказано параметра, відмінного від -p або -r, без аргументу назва, не буде спроби вилучити специфікацію доповнення для назви, для якої не існує специфікації, або не станеться помилка під час додавання специфікації доповнення.
- compopt [-o параметр] [-DEI] [+o параметр] [назва]
- Змінити
параметри
доповнення
для усіх
назв,
відповідно
до
параметрів,
або для
поточного
доповнення,
якщо не
вказано
назв. Якщо
параметрів
не вказано,
буде
виведено
варіанти
доповнення
для кожної
назви або
поточного
доповнення.
Можливі
значення
параметра
є коректні
значення
для
вбудованої
команди complete,
які
описано
вище.
Параметр -D
вказує на
те, що до
«типового»
доповнення
команди
має бути
застосовано
інші
задані
параметри.
Типове
доповнення
буде
використано
для
команди,
для якої
раніше не
було
визначено
доповнення.
Параметр -E
вказує, що
інші
параметри
слід
застосувати
до
доповнення
«порожніх»
команд.
Доповненням
порожніх
команд
вважають
доповнення
для
порожнього
рядка.
Параметр -I
вказує, що
інші
задані
параметри
слід
застосовувати
до
початкового
слова
рядка, яке
не є
встановленням
значення,
або після
роздільника
команди,
зокрема ;
або |.
Зазвичай,
це
доповнення
назви
команди.
Повернутим значенням буде «істина», якщо не буде вказано некоректного параметра, не буде спроби змінити параметри для назви, для якої не існує специфікації доповнення, або не станеться помилки виведення.
- continue [n]
- Відновити наступну ітерацію зовнішнього циклу for, while, until або select. Якщо вказано n, відновлення відбудеться на n-му зовнішньому циклі. n має бути ≥ 1. Якщо n є більшим за кількість зовнішніх циклів, буде відновлено ітерацію на останньому зовнішньому циклі (циклі найвищого рівня). Повернутим значенням буде 0, якщо n є більшим або рівним 1.
- declare [-aAfFgiIlnrtux] [-p] [назва[=значення] ...]
- typeset [-aAfFgiIlnrtux] [-p] [назва[=значення] ...]
- Оголосити змінні і/або задати їхні атрибути. Якщо задано назви, вивести значення змінних. Використання параметра -p призведе до виведення атрибутів і значень для кожної назви. Якщо використано -p з аргументами назва, додаткові параметри, відмінні від -f і -F, буде проігноровано. Якщо задано -p без аргументів назва, буде показано атрибути і значення усіх змінних, для яких вказано атрибути додатковими параметрами. Якщо не задано інших параметрів з -p, declare виведе атрибути і значення усіх змінних оболонки. Параметр -f обмежить виведення функцій оболонки. Параметр -F забороняє виведення визначень функцій — буде виведено лише назву функції та атрибути. Якщо увімкнено параметр оболонки extdebug за допомогою shopt, буде також виведено назву файла коду та номер рядка для кожної назви. Параметр -F неявним чином додає параметр -f. Параметр -g призводить до примусового створення змінних або внесення до них змін у загальному просторі назв, навіть якщо declare виконується у функції оболонки. Параметр буде проігноровано в усіх інших випадках. Використання параметра -I призводить до успадкування атрибутів (окрім атрибуту nameref) і значень локальними змінними із тими самими назвами, що і у зовнішньому щодо них просторі назв. Якщо наявної змінної виявлено не буде, початково, локальна змінна вважається такою, для якої не встановлено значення. Вказаними нижче параметрами можна скористатися для обмеження виведення до змінних із вказаним атрибутом або для надання змінним атрибутів:
- -a
- Кожна назва є індексованою змінною-масивом (див. Масиви above).
- -A
- Кожна назва є асоціативною змінною-масивом (див. Масиви above).
- -f
- Використовувати лише назви функцій.
- -i
- Змінну буде оброблено як ціле число; арифметичні обчислення (див. АРИФМЕТИЧНІ ОБЧИСЛЕННЯ above) буде виконано під час встановлення значення для змінної.
- -l
- При встановленні значення змінної усі літери верхнього регістру (великі) буде перетворено на літери нижнього регістру (малі). Атрибут верхнього регістру буде вимкнено.
- -n
- Надати кожній назві атрибут nameref, зробивши її іменованим посиланням на іншу змінну. Ця інша змінна визначається значенням назви. Усі посилання, встановлення значень та внесення змін до атрибутів назви, окрім тих, у яких використано або змінено сам атрибут -n, буде виконано над змінною, на яку посилається значення назви. Атрибут nameref не можна застосовувати до змінних-масивів.
- -r
- Зробити назви придатними лише для читання. Цим назвам потім не можна буде надати значення за допомогою інструкцій встановлення значень або скасувати встановлення значення.
- -t
- Надати усім записам назва атрибут трасування. Трасовані функції успадковують пастки DEBUG і RETURN від оболонки, звідки їх викликано. Атрибут трасування не має особливого значення для змінних.
- -u
- При встановленні значення змінної усі літери нижнього регістру (малі) буде перетворено на літери верхнього регістру (великі). Атрибут нижнього регістру буде вимкнено.
- -x
- Позначити назви для експортування до наступних команд за допомогою середовища.
Якщо скористатися «+» замість «-», атрибут буде вимкнено, за тим винятком, що +a і +A не можна використовувати для знищення змінних-масивів і +r не вилучатиме атрибут «лише читання». Якщо їх використано у функції, команди declare і typeset роблять усі записи назва локальними, подібно до застосування команди local, якщо не вказано параметра -g. Якщо після назви змінної вказано =значення, для змінної буде встановлено значення значення. Якщо використано -a або -A і синтаксис складеного встановлення значень для створення змінних-масивів, додаткові атрибути не працюватимуть, ж до наступних встановлень значень. Повернуте значення дорівнюватиме 0, аж доки не буде знайдено некоректний параметр, буде зроблено спробу визначити функцію за допомогою ``-f foo=bar'', буде зроблено спробу встановити значення для призначеної лише для читання змінної, буде зроблено спробу встановити значення змінної-масиву без використання синтаксису складеного встановлення значення (див. Масиви above), , одна із назв не є назвою змінної оболонки, буде зроблено спробу вимкнути стан «лише для читання» для призначеної лише для читання змінної, буде зроблено спробу вимкнути стан масиву для змінної-масиву або буде зроблено спробу показати функції, якої не існує, за допомогою -f.
- dirs [-clpv] [+n] [-n]
- Без параметрів виводить список каталогів, які зараз запам’ятовуються. Типово назви каталогів виводяться в одному рядку, розділені пропусками. Каталоги додаються до списку за допомогою команди pushd; команда popd вилучає записи зі списку. Першим у стеку завжди є поточний каталог.
- -c
- Очищує стос каталогів вилученням усіх записів.
- -l
- Створює список із використанням повних шляхів; у типовому форматі списку використовують тильду для позначення домашнього каталогу.
- -p
- Вивести стос каталогів із одним записом на кожен рядок.
- -v
- Вивести стос каталогів із одним записом на кожен рядок із додаванням до кожного запису його індексу у стосі.
- +n
- Показує n-ий запис, рахуючи зліва списку, показаного dirs при виклику без параметрів; відлік починається з нуля.
- -n
- Показує n-ий запис, рахуючи справа списку, показаного dirs при виклику без параметрів; відлік починається з нуля.
Повертається значення 0, крім випадків, коли вказано недійсний параметр або індекси n виходять за кінець стеку каталогів.
- disown [-ar] [-h] [специфікація-завдання ... | pid ... ]
- Без параметрів, вилучити специфікація-завдання з таблиці активних завдань. Якщо специфікація-завдання не вказано, і не вказано ні параметра -a, ні параметра -r, буде використано поточне завдання. Якщо вказано параметр -h, записи специфікація-завдання не буде вилучено з таблиці, але буде позначено так, щоб завданню не було надіслано SIGHUP, якщо оболонка отримує SIGHUP. Якщо вказано аргумент специфікація-завдання, параметр -a означатиме вилучення або позначення усіх завдань; параметр -r без аргументу специфікація-завдання обмежує дію до запущених завдань. Повернутим значенням буде 0, якщо специфікація-завдання вказує на коректне завдання.
- echo [-neE] [аргумент ...]
- Вивести відокремлені пробілами аргументи, завершивши виведення символом нового рядка. Повернутим станом буде 0, якщо не станеться помилки запису. Якщо вказано -n, кінцевий символ нового рядка буде придушено. Якщо вказано параметр -e, буде увімкнено обробку вказаних нижче екранованих символом зворотної похилої риски символів. Параметр -E вимикає обробку цих екранованих символів, навіть у системах, де їх типово буде оброблено. Параметром оболонки xpg_echo можна скористатися для динамічного визначення того, чи echo типово розгортатиме ці екрановані символи. echo не оброблятиме --, як кінець параметрів. echo оброблятиме такі екрановані послідовності символів:
- \a
- гудок (дзвінок)
- \b
- backspace
- \c
- приховати подальший вивід
- \e
- \E
- символ скасування
- \f
- подавання бланку
- \n
- новий рядок
- \r
- повернення каретки
- \t
- горизонтальна табуляція
- \v
- вертикальна табуляція
- \\
- зворотна похила
- \0nnn
- восьмибітовий символ, значенням якого є вісімкове nnn (від нуля до трьох вісімкових цифр)
- \xHH
- восьмибітовий символ, значенням якого є шістнадцяткове значення HH (від однієї до двох шістнадцяткових цифр)
- \uHHHH
- символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHH (від однієї до чотирьох шістнадцяткових цифр)
- \UHHHHHHHH
- символ Unicode (ISO/IEC 10646), чиїм значенням є шістнадцяткове значення HHHHHHHH (від однієї до восьми шістнадцяткових цифр)
- enable [-a] [-dnps] [-f назва_файла] [назва ...]
- Увімкнути або вимкнути вбудовані команди оболонки. Вимикання вбудованої команди уможливлює використання програми на диску, яка має таку саму назву, що і вбудована команда оболонки, яку слід виконати без визначення повного шляху до файла, хоча, зазвичай, оболонка шукає вбудовані команди, перш ніж виконувати програми на диску. Якщо використано -n, буде вимкнено усі команди, які визначаються аргументом назва; якщо ж цей параметр не вказано, назви буде увімкнено. Наприклад, щоб скористатися виконуваним файлом test, який зберігається в одному з каталогів, описаних змінною PATH, а не відповідною вбудованою командою оболонки, слід віддати команду ``enable -n test''. Параметр -f означає, що слід завантажити нову вбудовану команду назва із об'єкта спільного використання назва_файла у системах, у яких передбачено підтримку динамічного завантаження. Bash використовуватиме значення змінної BASH_LOADABLES_PATH як списку каталогів, які відокремлено двокрапками, де слід шукати файл із назвою назва_файла. The default is system-dependent. Параметр -d призведе до вилучення вбудованої команди, які раніше було завантажено за допомогою -f. Якщо не буде вказано аргументи назва або якщо вказано параметр -p, буде виведено список вбудованих команд оболонки. Якщо не вказано інших аргументів параметрів, список складатиметься із усіх увімкнених вбудованих команд оболонки. Якщо вказано -n, буде виведено лише вимкнені вбудовані команди. Якщо вказано -a, у виведеному списку будуть усі вбудовані команди із позначками щодо того, чи увімкнено ці команди. Якщо вказано -s, виведення буде обмежено особливі вбудовані команди POSIX. Якщо не буде вказано параметрів і назва не буде назвою вбудованої команди оболонки, enable спробує завантажити назву з об'єкта спільного використання із назвою назва так, наче командою була ``enable -f name name . Повернутим значенням є 0, якщо назва не є вбудованою командою оболонки або не станеться помилка під час завантаження нової вбудованої команди з об'єкта спільного використання.
- eval [аргумент ...]
- Аргументи буде прочитано і з'єднано в одну команду. Потім цю команду буде прочитано і виконано оболонкою, а її стан виходу буде повернуто як значення eval. Якщо аргументів не буде вказано або усі аргументи будуть порожніми, eval поверне 0.
- exec [-cl] [-a назва] [команда [аргументи]]
- Якщо вказано аргумент команда, ця команда замінить оболонку. Нового процесу створено не буде. Аргументи стануть аргументами команди. Якщо вказано параметр -l, оболонка додасть дефіс на початку нульового аргументу, переданого команді. Це те, що робить login(1). Використання параметра -c призводить до того, що команду буде виконано із порожнім середовищем. Якщо вказано параметр -a, оболонка передасть назву як нульовий аргумент виконаної команди. Якщо команду не може бути виконано з певної причини, неінтерактивна оболонка завершить роботу, якщо не буде увімкнено параметра оболонки execfail. Якщо параметр оболонки буде увімкнено, буде повернуто повідомлення про помилку. Інтерактивна оболонка поверне повідомлення про помилку, якщо файл неможливо виконати. Підоболонка безумовно завершить роботу, якщо спроба виконати exec буде невдалою. Якщо команду не буде вказано, буде виконано усі переспрямування у поточній оболонці і повернуто стан 0. Якщо станеться помилка переспрямування, буде повернуто стан 1.
- exit [n]
- Наказує оболонці завершити роботу із станом n. Якщо n не вказано, стан виходу визначатиметься станом виходу останньої виконаної команди. До завершення роботи оболонки буде виконано пастку EXIT.
- export [-fn] [назва[=слово]] ...
- export -p
- Вказані назви буде позначено для автоматичного експортування до середовища наступних виконаних команд. Якщо вказано параметра -f, назви вважатимуться посиланнями на функції. Якщо не вказано жодної назви або якщо вказано параметр -p, буде виведено назви усіх експортованих змінних. Зазначення параметра -n призведе до вилучення властивості експортування з кожної назви. Якщо після назви змінної буде вказано =слово, змінній буде надано значення слово. Команда export повертає стан виходу 0, якщо не буде виявлено некоректного параметра, жодна з назв не буде некоректною назвою змінної оболонки або не буде вказано -f із назвою, яка не є назвою функції.
- fc [-e назва_редактора] [-lnr] [перший] [останній]
- fc -s [взірець=замінник] [команда]
- Перша
форма
визначає
діапазон
команд у
рядках від
перший до
останній
у списку
журналу і
виводить
їх для
повторного
виконання
або
редагування
і
повторного
виконання.
Значення
перший і
останній
можна
вказати як
рядок (для
виявлення
останньої
команди,
яка
починалася
із
вказаного
рядка) або
як номер
(індекс у
списку
журналу, де
від'ємні
значення
використовують
як відступ
від номера
поточної
команди). У
списку
значення
першого
або
останнього
рівні 0 є
еквівалентом
-1, -0 є
еквівалентом
визначення
поточної
команди
(зазвичай,
команди fc).
В інших
випадках, 0
є
еквівалентом
-1, а -0 є
некоректним
значенням.
Якщо
останній
не вказано,
для нього
буде
встановлено
значення
поточної
команди у
списку
(отже, ``fc -l -10''
виводить
останні 10
команд) і
до
першого в
інших
випадках.
Якщо
значення
перший не
вказано,
для нього
буде
встановлено
значення,
що
відповідає
попередній
команді
для
редагування
і -16 для
списку.
Параметр -n придушує виведення номерів команд у списку. Параметр -r змінює порядок команд у списку на зворотний. Якщо вказано параметр -l, команди буде виведено до стандартного виведення. Якщо цей параметр не вказано, для редагування файла, у якому містяться ці команди, буде викликано редактор, заданий аргументом назва_редактора. Якщо назву_редактора не вказано, буде використано значення змінної FCEDIT та значення змінної EDITOR, якщо значення FCEDIT не встановлено. Якщо не встановлено жодної змінної, буде використано vi Коли редагування буде завершено, редаговані команди буде повторено і виконано.
У другій формі команду буде повторно виконано після заміни кожного екземпляра взірця на замінник. Команду буде оброблено у той самий спосіб, що і аргумент перший вище. Корисною альтернативною формою використання у поєднанні з цим є ``r="fc -s"'', отже, введення ``r cc'' виконує останню команду, починаючи з ``cc'' а введення ``r'' повторно виконує останню команду.
Якщо використано першу форму, буде повернуто значення 0, якщо не буде виявлено некоректного параметра або якщо вказані перший або останній рядки журналу не належать до припустимого діапазону. Якщо буде вказано параметр -e, повернутим значення буде повернуте значення останньої виконаної команди або помилка, якщо станеться помилка із тимчасовим файлом команд. Якщо використано другу форму, повернутим станом буде стан повторно виконаної команди, якщо команда не задає коректного рядка журналу. У інших випадках fc повертає помилку.
- fg [специфікація_завдання]
- Відновити роботу завдання специфікація_завдання в основному режимі і зробити його поточним завданням. Якщо аргументу специфікація_завдання не вказано, буде використано дані оболонки щодо поточного завдання. Повернутим значенням буде значення, яке повернуто командою, яку переведено в основний режим, або повідомлення про помилку, якщо запущено із вимкненим керуванням завданнями або, якщо запущено з увімкненим керуванням завданнями, якщо специфікація_завдання не визначає коректного завдання або специфікація_завдання визначає завдання. яке було запущено без керування завданнями.
- getopts рядок_параметрів назва [аргумент ...]
- getopts
використовують
підпрограми
оболонки
для
обробки
позиційних
параметрів.
Аргумент
рядок_параметрів
містить
символи
параметрів,
які слід
розпізнати;
якщо після
символу
вказано
двокрапку,
параметр
повинен
мати
аргумент,
який слід
відокремити
від
параметра
пробілом.
Символами
параметра
не можуть
бути
символи
двокрапки
та знаку
питання.
Під час
кожного
виклику getopts
додає
наступний
параметр
до змінної
середовища
назва,
ініціалізуючи
змінну
назва,
якщо її не
існує, а
індекс
наступного
аргументу,
який має
бути
оброблено,
буде
записано
до змінної
OPTIND. OPTIND
буде
ініціалізовано
до 1
кожного
разу, коли
буде
викликано
оболонку
або скрипт
оболонки.
Якщо
параметр
потребує
аргументу,
getopts записує
аргумент
до змінної
OPTARG.
Оболонка
не
виконує
автоматично
скидання
OPTIND; змінну
слід
скидати
вручну
між
викликами
getopts у межах
одного
виклику
оболонки,
якщо слід
змінити
набір
параметрів.
Якщо буде виявлено кінець параметрів, getopts завершить роботу із поверненим значенням, що перевищує нуль. Для OPTIND буде встановлено індекс першого відмінного від параметра аргументу і для назви буде встановлено значення ?.
Зазвичай, getopts обробляє позиційні параметри, але якщо вказано додаткові значення, як значення аргумент, getopts оброблятиме ці аргументи замість позиційних параметрів.
getopts може повідомляти про помилки у два способи. Якщо першим символом рядка_параметрів є двокрапка, буде використано мовчазний режим звітування про помилки. У звичному режимі роботи діагностичні повідомлення буде виведено, якщо буде виявлено некоректні параметри або пропущені аргументи параметрів. Якщо для змінної OPTERR встановлено значення 0, повідомлень про помилки не буде показано, навіть якщо першим символом рядка_параметрів не буде двокрапка.
Якщо буде виявлено некоректний параметр, getopts записує ? до назва і, якщо команда працює не у мовчазному режимі, виводить повідомлення про помилку і скасовує встановлення значення OPTARG. Якщо getopts працює у мовчазному режимі, символ знайденого параметра буде записано до OPTARG, а діагностичне повідомлення виведено не буде.
Якщо не буде знайдено обов'язкового аргументу і getopts працює не у мовчазному режимі, буде встановлено значення знаку питання (?) для назви, скасовано визначення OPTARG і виведено діагностичне повідомлення. Якщо getopts працює у мовчазному режимі, буде встановлено значення двокрапки (:) для назви, для OPTARG буде встановлено значення знайденого символу параметра.
getopts повертає «істину», якщо буде знайдено параметр, вказаний або невказаний. Повертає «хибність», якщо буде виявлено кінець параметрів або станеться помилка.
- hash [-lr] [-p назва_файла] [-dt] [назва]
- Кожного разу, коли викликано hash, буде визначено і збережено у пам'яті повний шлях до команди назва пошуком у каталогах змінної $PATH. Усі раніше збережені у пам'яті шляхи буде відкинуто. Якщо буде вказано параметр -p, пошук шляху виконано не буде, а як повну назву файла команди буде використано назву_файла. Використання параметра -r призведе до того, що оболонка витре з пам'яті усіх збережені місця. Використання параметра -d призведе до вилучення з пам'яті усіх збережених записів назва. Якщо вказано параметр -t, буде виведено повний шлях для кожної назви. Якщо буде вказано декілька аргументів назва із параметром -t, назву буде виведено перед хешованим повним шляхом. Використання параметра -l призведе до того, що дані буде виведено у форматі, яким можна буде скористатися як вхідними даними. Якщо аргументів вказано не буде або якщо буде вказано лише -l, оболонка виведе відомості щодо команд у пам'яті. Станом повернення є «істина», якщо було знайдено назву і не вказано некоректних параметрів.
- help [-dms] [взірець]
- Показати корисні відомості щодо вбудованих команд. Якщо вказано взірець, help надає докладну довідку для усіх команд, назви яких відповідають взірцю взірець. Якщо взірець не вказано, виводить довідку для усіх вбудованих команд та для структури керування оболонкою.
- -d
- Показати короткий опис для кожного взірця
- -m
- Показати опис кожного взірця у форматі, який подібний до сторінок підручника
- -s
- Показати лише короткий опис користування для кожного взірця
Стан повернення буде рівним 0, якщо буде знайдено хоча б одну команду, яка відповідає взірцю.
- history [n]
- history -c
- history -d зсув
- history -d початок-кінець
- history -anrw [назва_файла]
- history -p аргумент [аргумент ...]
- history -s аргумент [аргумент ...]
- Без параметрів, вивести список журналу команд з номерами рядків. Рядки, позначені *, змінено. З аргументом n перелічує лише останні n рядків. Якщо змінна оболонки HISTTIMEFORMAT встановлена і не null, вона використовується як форматний рядок для strftime(3), щоб показати мітку часу, пов'язану з кожним показаним записом журналу. Між відформатованою міткою часу та рядком журналу не робиться пропуск. Якщо надано назву файлу, її використовують як назву файлу журналу; Якщо ні, використовується значення HISTFILE. Якщо є параметри, їхні значення такі:
- -c
- Спорожнити список журналу вилученням з нього усіх записів.
- -d відступ
- Вилучити запис журналу на позиції відступ. Якщо значення відступ є від'ємним, його буде відраховано назад від позиції, яка на одиницю більша за останню позицію у журналі. Отже, від'ємні індекси відраховують від кінця журналу, а індекс -1 означає поточну команду history -d.
- -d початок-кінець
- Вилучити з журналу діапазон записів між позиціями початок і кінець, включно. Додатні і від'ємні значення початок і кінець буде оброблено в описаний вище спосіб.
- -a
- Дописати «нові» рядки журналу до файла журналу. Це рядки журналу, які введено з моменту початку поточного сеансу bash, але які ще не дописано до файла журналу.
- -n
- Прочитати рядки журналу, які ще не прочитано з файла журналу до поточного списку журналу. Це рядки, які дописано до файла журналу з моменту початку поточного сеансу bash.
- -r
- Прочитати вміст файла журналу і дописати його до поточного списку журналу.
- -w
- Записати поточний список журналу до файла журналу, перезаписавши вміст файла журналу.
- -p
- Виконати заміну за журналом для наступних аргументів і вивести результат до стандартного виведення. Не зберігає результати до списку журналу. Для вимикання звичного розгортання журналу усі аргументи має бути взято у лапки.
- -s
- Зберегти аргументи у списку журналу як єдиний запис. Перед додаванням аргументів останню команду у списку журналу буде вилучено.
Якщо встановлено змінну HISTTIMEFORMAT, інформація мітки часу, асоційована з кожним записом журналу записується у файл журналу, з позначкою символу коментарю журналу. Коли файл журналу зчитується, рядки, що починаються з символу коментарю, після якого одразу йде цифра, інтерпретуються, як мітки часу для відповідного запису журналу. Значення повернення є 0, якщо не знайдено неправильну опцію, сталася помилка під час читання або запису файлу журналу, надано неправильний аргумент відступ або діапазон для -d, або розширення журналу надане, як аргумент до -p зазнало невдачі.
- jobs [-lnprs] [ специфікація_завдання ... ]
- jobs -x команда [ аргументи ... ]
- Перша форма показує активні завдання. Параметри мають наступні значення:
- -l
- Вивести список ідентифікаторів процесів разом з іншою інформацією.
- -n
- Вивести відомості лише про завдання, стан яких було змінено з моменту, коли користувача востаннє інформували про їхній стан.
- -p
- Вивести лише ідентифікатор процесу, який є лідером групи процесів завдання.
- -r
- Показати лише завдання, що працюють.
- -s
- Показати лише зупинені завдання.
Якщо вказано аргумент специфікація_завдання, виведення буде обмежено відомостями щодо відповідного завдання. Буде повернуто стан 0, якщо не буде виявлено некоректного параметра або некоректної заданої специфікації_завдання.
Якщо надано опцію -x, jobs замінює будь-який jobspec, знайдений в command або args відповідним ІД групи процесів, та виконує command передаючи йому args, і вертаючи його стан виходу.
- kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
- kill -l|-L [sigspec | exit_status]
- Надіслати сигнал, вказаний через sigspec або signum процесу, вказаного через pid або jobspec. sigspec є або назва сигналу (ігноруючи регістр), напр. SIGKILL (з або без префіксу SIG) або номер сигналу; signum є номером сигналу. Якщо sigspec відсутній, тоді береться SIGTERM. Аргумент -l виводить назви сигналів. Якщо надано будь-який аргумент, коли вказано -l, виводяться назви сигналів, що відповідають кожному аргументу, і значення виходу є 0. Аргумент exit_status для -l є числом, що вказує або номер сигналу або стан виходу для процесу, вбитого сигналом. Опція -L є рівною -l. kill вертає правду, якщо принаймні один сигнал успішно надіслано, або неправду, якщо сталася помилка або знайдено неправильну опцію.
- let arg [arg ...]
- Кожен аргумент є арифметичним виразом, який треба обчислити (див. АРИФМЕТИЧНЕ ОЦІНЮВАННЯ above). Якщо останній arg обраховано в 0, let вертає 1; інакше вертається 0.
- local [option] [назва[=value] ... | - ]
- Для кожного аргументу буде створено локальну змінну із назвою назва, якій буде надано значення значення. Параметром може бути будь-який з параметрів, які приймає команда declare. Якщо local використано у функції, змінна назва матиме область видимості, яку буде обмежено функцією і її дочірніми об'єктами. Якщо назвою є -, набір параметрів оболонки стане локальним для функції, з якої викликано local: для параметрі оболонки, які змінено за допомогою вбудованої команди set всередині функції, буде відновлено їхні початкові значення при поверненні з функції. Відновлення спрацює так, наче було виконано послідовність команд set для відновлення значень, які змінні мали до виконання функції. Якщо не вказано операндів, local записує список локальних змінних до стандартного виведення. Використання local поза функціями є помилкою. Команда повертає стан 0, якщо local використано всередині функції, вказано коректне значення назва і назва не є призначеною лише для читання змінною.
- logout
- Вийти з оболонки входу в систему.
- mapfile [-d роздільник] [-n кількість] [-O початок] [-s кількість] [-t] [-u дескриптор_файла] [-C зворотний_виклик] [-c частка] [масив]
- readarray [-d роздільник] [-n кількість] [-O початок] [-s кількість] [-t] [-u дескриптор_файла] [-C зворотний_виклик] [-c частка] [масив]
- Прочитати рядки зі стандартного джерела вхідних даних до змінної — індексованого масиву масив, або прочитати ці дані з файла із дескриптором дескриптор_файла, якщо вказано параметр -u. Типовим масивом є змінна MAPFILE. Параметри, якщо їх вказано, мають такі призначення:
- -d
- Перший символ із роздільник використовується для закінчення кожного рядка введення замість символу нового рядка. Якщо рядок роздільник порожній, mapfile закінчить рядок, коли прочитає символ NUL.
- -n
- Скопіювати не більше кількість рядків. Якщо значенням кількість є 0, буде скопійовано усі рядки.
- -O
- Розпочати встановлення значень масиву з індексу початок. Типовим індексом є 0.
- -s
- Відкинути перших count прочитаних рядків.
- -t
- Вилучити кінцевий роздільник (типовим роздільником є символ нового рядка) з кожного прочитаного рядка.
- -u
- Прочитати рядки з файла із дескриптором дескриптор_файла, а не зі стандартного джерела вхідних даних.
- -C
- Обчислювати зворотний_виклик кожного разу, коли буде прочитано частку рядків. Частку буде задано параметром -c.
- -c
- Вказати кількість рядків, які буде прочитано між послідовними викликами зворотного_виклику.
Якщо -C вказано без -c, типовий квант дорівнює 5000. Коли обчислюється callback оцінюється, йому, як додаткові аргументи, надаються індекс наступного елемента масиву, який потрібно присвоїти, і рядок, який потрібно присвоїти цьому елементу. callback обчислюється після прочитання рядка, але до присвоєння значення елементу масиву.
Якщо початок не вказано явно, mapfile спорожнить масив до встановлення для нього значень.
mapfile повертає стан успіху, якщо не буде виявлено некоректних параметрів або аргументів параметрів, якщо масив не буде некоректним або таким, для якого не можна встановлювати значення, і якщо масив є індексованим масивом.
- popd [-n] [+n] [-n]
- Вилучає запис зі стосу каталогів. Нумерація елементів виконується з 0 з першого каталогу зі списку dirs. Без аргументів вилучає верхній каталог зі стосу і переходить до нового верхнього каталогу. Аргументи, якщо вказано, мають таке значення:
- -n
- Придушує звичайну зміну каталогу при вилученні каталогів зі стосу, отже, дії відбуваються лише із стосом.
- +n
- Вилучає n-ий запис, рахуючи зліва списку, показаного dirs; відлік починається з нуля зі стосу. Приклад: ``popd +0'' вилучає перший каталог, ``popd +1'' другий.
- -n
- Вилучає n-ий запис, рахуючи справа списку, показаного dirs; відлік починається з нуля. Приклад: ``popd -0'' вилучає останній каталог, ``popd -1'' передостанній.
Якщо до верхнього елемента у стосі каталогів буде внесено зміни, і було вказано параметр B, popd використовує вбудовану команду cd для переходу до каталогу на вершині стосу. Якщо спроба виконання cd завершиться невдало, popd поверне ненульове значення.
У інших випадках popd повертає значення «хибність», якщо буде виявлено некоректний параметр, стос каталогів є порожнім або вказано запис стосу каталогів, якого не існує.
Якщо виконання команди popd буде успішним, bash поверне dirs, щоб показати остаточний вміст стосу каталогів, і поверне стан 0.
- printf [-v змінна] формат [аргументи]
- Записати
сформатовані
аргументи
до
стандартного
виходу під
контролем
формат.
Опція -v
призначає
вивід
змінній var
замість
друкування
на
стандартний
вихід.
Формат є символьним рядком, що містить три типи об'єктів: звичайні символи, що просто копіюються на стандартний вихід, керівна послідовність символів, які перетворюємо і копіюємо на стандартний вихід, та специфікації формату, кожна з яких друкує наступний подальший аргумент. Окрім стандартних специфікацій формату printf(1), printf інтерпретує наступні розширення:
- %b
- примушує printf розкривати керівні послідовності із символом зворотної похилої риски відповідно до аргументу, так само як echo -e.
- %q
- примушує printf виводити відповідний argument у форматі, що може бути перевикористаний, як вхід для оболонки.
- %Q
- подібний до %q, але застосовує будь-яку надану точність до аргументу аргумент до його нейтралізації.
- %(формат_дати)T
- примушує printf виводити рядок дати-часу, що є результатом використання datefmt, як рядку формату для strftime(3). Відповідне argument є цілим числом, що відповідає кількості секунд з початку епохи. Можна вживати два спецзначення: -1 представляє поточний час, і -2 представляє час, коли було запущено оболонку. Якщо аргументів не вказано, конвертація поводиться, ніби надано -1. Це є винятком зі звичайної поведінки printf.
Директиви %b, %q та %T всі використовують аргументи ширини та точності поля зі специфікації формату та записують стільки байтів з (або використовують для того широкого поля) розширеного аргументу, що за звичай має більше символів, ніж оригінал.
Аргументи для специфікаторів нерядкових форматів розглядаються як константи C, за винятком, коли дозволено передній знак плюса чи мінуса, і якщо передній символ є одинарною або подвійною лапкою, значенням є значення ASCII наступного символу.
Формат буде використано належну кількість разів для форматування усіх аргументів. Якщо у форматі визначено більше аргументів, ніж вказано, зайві специфікації формату буде оброблено так, наче їм передано нульові значення або порожні рядки, відповідно. Повернутим значенням буде нуль при успіху і значення, яке є відмінним від нуля, якщо станеться помилка.
- pushd [-n] [+n] [-n]
- pushd [-n] [каталог]
- Додає каталог на верхівку стосу або обертах стос так, щоб на верхівці опинився поточний робочий каталог. Якщо не вказано аргументів, pushd міняє місцями два верхніх елементи стосу каталогів. Аргументи, якщо їх вказано, мають таке призначення:
- -n
- Придушує звичайну зміну каталогу при ротації або додаванні каталогів до стосу, отже, дії відбуваються лише із стосом.
- +n
- Прокручує стек так, щоб n-ий каталог (відлік ведеться з лівої частини списку, показаного dirs і починається з нуля) опинився на вершині списку.
- -n
- Прокручує стек так, щоб n-ий каталог (відлік ведеться з правої частини списку, показаного dirs і починається з нуля) опинився на вершині списку.
- каталог
- Додає каталог до стосу каталогів на верхню позицію
Після внесення змін до стосу, якщо було вказано параметр -n, pushd використовує вбудовану команду cd для переходу до каталогу на вершині стосу. Якщо спроба виконання cd завершиться невдало, pushd поверне ненульове значення.
В інших випадках, якщо не вказано аргументів, pushd повертає 0, якщо стос каталогів не є порожнім. При циклічному переході стосом каталогів pushd повертає 0, якщо стос каталогів не є порожнім або буде вказано елемент стосу каталогів, якого не існує.
Якщо виконання команди pushd буде успішним, bash поверне dirs, щоб показати остаточний вміст стосу каталогів.
- pwd [-LP]
- Надрукувати абсолютний шлях поточного робочого каталогу. Якщо додано параметр -P або ввімкнено фізичний параметр -o для вбудованої команди set, надрукований шлях не міститиме символьних посилань. Якщо використовується параметр -L, надрукований шлях може містити символьні посилання. Стан повернення дорівнює 0, якщо під час читання назви поточного каталогу не виникло помилки і вказано лише дійсні параметри.
- read [-ers] [-a назва] [-d роздільник] [-i текст] [-n кількість_символів] [-N кількість_символів] [-p запит] [-t час_очікування] [-u дескриптор_файла] [назва ...]
- Буде прочитано один рядок зі стандартного джерела вхідних даних або з файла із дескриптором дескриптор_файла, який передано як аргумент параметра -u, рядок буде поділено на слова, як це описано above у розділі Поділ на слова, і перше слово стане значенням першої назви, друге слово — другої назви тощо. Якщо кількість слів буде більшою за кількість назв, залишок списку слів разом із роздільниками стане значенням останньої назви. Якщо з потоку вхідних даних буде прочитано менше слів, ніж назв, решті назв буде надано порожні значення. Для поділу рядка на слова буде використано символи з IFS. Також буде використано ті самі правила, які оболонка використовує для розгортання (описано above у розділі Поділ на слова). Для усування спеціального призначення наступного прочитаного символу або для позначення продовження рядка можна скористатися символом зворотної похилої риски (\). Параметри, якщо їх вказано, мають таке призначення:
- -a назва_масиву
- Слова присвоюються послідовним індексам змінної-масиву aname, починаючи з 0. aname є не встановленим перед присвоєнням нових значень. Інші аргументи назва нехтуються.
- -d роздільник
- Перший символ із роздільник використовується для закінчення кожного рядка введення замість символу нового рядка. Якщо рядок роздільник порожній, read закінчить рядок, коли прочитає символ NUL.
- -e
- Якщо
стандартні
вхідні
дані
надходять
з
термінала,
для
отримання
рядка буде
використано
readline (див. READLINE
above)
readline використовує поточні (або типові, якщо редагування рядків раніше не було активним) параметри редагування, але використовує типове доповнення назв файлів самої бібліотеки readline. - -i текст
- Якщо readline використовується для читання рядка, перед початком редагування в буфер редагування поміщається текст.
- -n к-ть_символів
- read повертається після прочитання кількість_символів символів, а не очікує повного рядка введення, але зважає на роздільник, якщо перед роздільником прочитано менше ніж кількість_символів символів.
- -N к-ть_символів
- read повертається після прочитання саме кількість_символів символів, а не чекає на повний рядок введення, якщо не зустрічається EOF або read не перестає працювати. Символи-роздільники, які зустрічаються у введених даних, не обробляються спеціально і не викликають повернення з read, доки не буде прочитано кількість_символів символів. Результат не розбивається на символи в IFS; сенс у тому, що змінній примвоюються саме прочитані символи (за винятком зворотної похилої риски; див. нижче параметр -r).
- -p запит
- Вивести запит до стандартного виведення помилок, без кінцевого символу нового рядка, до спроб читання будь-яких вхідних даних. Запит буде показано, лише якщо вхідні дані надходять з термінала.
- -r
- Символ зворотної похилої риски не працює як символ екранування. При цьому, символ зворотної похилої риски вважається частиною рядка. Зокрема, пару «зворотна похила риска — новий рядок» не можна використовувати як послідовність продовження рядка.
- -s
- Мовчазний режим. Якщо ввід йде з термінала, символи не відбиваються на вивід.
- -t час_очікування
- Спричиняє перевищення часу очікування у read і повертає повідомлення про помилку, якщо не буде прочитати повний рядок вхідних даних (або вказану кількість символів) протягом час_очікування секунд. Часом очікування може бути десяткове число із дробовою частиною після десяткової крапки. Цей параметр працюватиме, лише якщо read читає вхідні дані з термінала, каналу або іншого особливого файла — він не працюватиме при читанні зі звичайних файлів. При перевищенні часу очікування у read команда read зберігає будь-які частково прочитані вхідні дані до вказаної змінної назва. Якщо значенням часу_очікування є 0, read повертатиме керування негайно, без спроби прочитати якісь дані. Станом виходу є 0, якщо вхідні дані доступні для файла із вказаним дескриптором або читання поверне EOF. Якщо це не так, стан повернення буде ненульовим. Стан виходу буде більшим за 128, якщо буде перевищено час очікування.
- -u дескриптор_файла
- Читати вхід з дескриптора дескриптор_файла.
Якщо не вказано назв, прочитаний рядок, без кінцевого роздільника, але без інших змін, буде встановлено як значення для змінної REPLY. Станом виходу буде нуль, якщо не буде виявлено символу кінця файла, не буде перевищено час очікування на завершення read (у цьому випадку стан завершення перевищуватиме 128), не буде помилки встановлення значення (зокрема, встановлення значення для змінної, яку призначено лише для читання) або не буде вказано некоректного дескриптора файла як аргументу -u.
- readonly [-aAf] [-p] [назва[=слово] ...]
- Вказані назви буде позначено як так, які призначено лише для читання; значення цих назв не можна буде змінити наступними інструкціями зі встановлення значень. Якщо вказано параметр -f, буде також позначено функції, які буде знайдено за критерієм пошук назви. Використання параметра -a обмежує змінні лише індексованими масивами, а параметра -A — лише асоціативними масивами. Якщо вказано обидва параметри, пріоритет матиме -A. Якщо аргументів назва не вказано, або якщо вказано параметр -p, буде виведено список усіх придатних лише для читання назв. Для обмеження виведених даних піднабором набору призначених лише для читання назв можна скористатися іншими параметрами. Параметр -p призводить до виведення у форматі, яким можна скористатися як вхідними даними. Якщо після назви змінної вказати =слово, для змінної буде встановлено значення слово. Станом повернення буде 0, якщо не вказано некоректного параметра, усі назви є коректними назвами змінних оболонки і -f вказано із назвою, яка є назвою функції.
- return [n]
- Спричиняє припинення виконання функції і повернення значення, яке вказано аргументом n, до місця, з якого було викликано функцію. Якщо n не вказано, станом повернення буде стан повернення останньої команди, яку виконано у межах функції. Якщо return виконано обробником пасток, останньою командою, яку буде використано для визначення стану, буде остання команда, яку було виконано до обробника пасток. Якщо return виконано у межах пастки DEBUG, останньою командою, яку буде використано для визначення стану, буде остання команда, яку було виконано обробником пастки до виклику return. Якщо return використано поза межами функції, але під час виконання скрипту командою . (source), оболонка припинить виконання скрипту і поверне або n або стан виходу останньої команди, яку було виконано у межах скрипту, як стан виходу скрипту. Якщо вказано n, значенням повернення будуть його останні 8 бітів. Стан повернення буде ненульовим, якщо для вказано return нечисловий аргумент або команду використано поза функцією і не під час виконання скрипту за допомогою . або source. Перед поверненням до виконання після функції або скрипту буде виконано усі команди, які пов'язано із пасткою RETURN.
- set [-abefhkmnptuvxBCEHPT] [-o назва-параметра] [--] [-] [аргумент ...]
- set [+abefhkmnptuvxBCEHPT] [+o назва-параметра] [--] [-] [аргумент ...]
- Без параметрів, буде виведено назву і значення усіх змінних оболонки у форматі, яким можна повторно скористатися як вхідними даними для встановлення або повторного встановлення поточного набору змінних. Значення змінних, які призначено лише для читання, не може бути змінено. У режимі posix буде виведено лише змінні оболонки. Виведені дані буде упорядковано відповідно до поточної локалі. Якщо вказано параметри, вони встановлюватимуть значення або скасовуватимуть встановлення значення атрибутів оболонки. Усі аргументи, які лишаться після обробки параметрів, вважатимуться значенням позиційний параметрів. Їх буде використано як значення, за порядком, $1, $2, ... $n. Параметри, якщо їх вказано, мають таке призначення:
- -a
- Кожній змінній або функції, що створюється або змінюється, надається атрибут експорту та позначка для експорту в середовище наступних команд.
- -b
- Повідомляти про стан припинених фонових завдань негайно, а не перед наступним основним запитом. Діє лише тоді, коли увімкнено керування завданнями.
- -e
- Вийти
негайно,
якщо
конвеєр
(який може
місити
одну
просту
команду),
список
або
складена
команда
(див.
ГРАМАТИКА
ОБОЛОНКИ
above),
завершується
з
ненульовим
станом.
Вихід з
оболонки
не
відбувається,
якщо
команда,
яка не
працює, є
частиною
списку
команд
відразу
після
ключового
слова while
або until,
частиною
тесту
після
зарезервованих
слів if або
elif,
частиною
будь-якої
команди,
виконуваної
в списках
&& або ||, за
винятком
команди
після
останнього
&& або ||,
будь-якою
командою в
конвеєрі,
крім
останньої,
або якщо
повернуте
командою
значення
інвертовано
за
допомогою
!. Якщо
складена
команда,
відмінна
від
підоболонки,
повертає
ненульовий
стан через
невдачу
команди
тоді, коли
нехтувалося
-e, вихід з
оболонки
не
відбувається.
Якщо
встановлено
пастку на
ERR, вона
виконується
перед
виходом із
оболонки.
Цей
параметр
застосовується
до
середовища
оболонки
та кожного
із
середовищ
підоболонки
окремо
(див.
СЕРЕДОВИЩЕ
ВИКОНАННЯ
КОМАНД above), ,
і може
призвести
до виходу з
підоболонки,
перш ніж у
ній буде
виконано
всі
команди.
Якщо складена команда або функція оболонки виконується в контексті, де нехтується -e, на жодну з команд, виконуваних у межах складеної команди або тіла функції, не вплине параметр -e, навіть якщо -e встановлено і команда повертає стан відмови. Якщо складена команда або функція оболонки встановлює -e під час виконання в контексті, де -e нехтується, це налаштування не матиме жодного ефекту до завершення складеної команди або команди, що містить виклик функції.
- -f
- Вимкнути розгортання шляхів.
- -h
- Запам'ятати розташування команд, у якому оболонка шукає їх для виконання. Типово увімкнено.
- -k
- Усі аргументи у формі інструкцій із встановлення значень, а не лише ті, які передують назві команди, буде записано до середовища для команди.
- -m
- Режим спостереження. Керування завданнями увімкнено. Типово, цей параметр увімкнено для інтерактивних оболонок у системах, де передбачено таку підтримку (див. КЕРУВАННЯ ЗАВДАННЯМИ above). Усі процеси працюватимуть в окремій групі процесів. При завершенні фонового завдання оболонка виведе рядок зі станом виходу завдання.
- -n
- Прочитати команди, але не виконувати їх. Цим можна скористатися для перевірки скрипту оболонок на синтаксичні помилки. Буде проігноровано у режимі інтерактивної оболонки.
- -o назва_параметра
- option-name може бути одним з наступних:
- allexport
- Те саме, що -a.
- braceexpand
- Те саме, що і -B.
- emacs
- Скористатися інтерфейсом редагування рядка команди у стилі emacs. Такий режим буде типово увімкнено для інтерактивної оболонки, якщо оболонку не було запущено із параметром --noediting. Це також стосується режиму редагування, який буде використано для read -e.
- errexit
- Те саме, що і -e.
- errtrace
- Те саме, що і -E.
- functrace
- Те саме, що і -T.
- hashall
- Те саме, що і -h.
- histexpand
- Те саме, що і -H.
- history
- Увімкнути журнал команд, як описано above у розділі ЖУРНАЛ. Цей параметр типово увімкнено в інтерактивних оболонках.
- ignoreeof
- Результат буде таким, наче використано команду оболонки ``IGNOREEOF=10'' виконано (див. Shell Variables above).
- keyword
- Те саме, що і -k.
- monitor
- Те саме, що і -m.
- noclobber
- Те саме, що і -C.
- noexec
- Те саме, що і -n.
- noglob
- Те саме, що і -f.
- nolog
- Наразі ігнорується.
- notify
- Те саме, що і -b.
- nounset
- Те саме, що і -u.
- onecmd
- Те саме, що і -t.
- physical
- Те саме, що і -P.
- pipefail
- Якщо встановлено, значення, що повертає конвеєр, є значенням останньої (крайньої правої) команди для виходу з ненульовим статусом або нулем, якщо всі команди в конвеєрі завершились успішно. Цей параметр вимкнено за замовчуванням.
- posix
- Змінити поведінку bash там, де типові дії відрізняються від стандарту POSIX так, щоб відповідати стандарту (режим posix). Див. розділ ТАКОЖ ПЕРЕГЛЯНЬТЕ below , де наведено посилання на документ із подробицями щодо того, як режим posix впливає на поведінку bash.
- privileged
- Те саме, що і -p.
- verbose
- Те саме, що і -v.
- vi
- Скористатися інтерфейсом редактора командного рядка у стилі vi. Також стосується інтерфейсу редагування, який використовується для read -e.
- xtrace
- Те саме, що і -x.
Якщо -o вказано без назва_параметра, буде виведено значення поточних параметрів. Якщо вказано +o без назва_параметра, до стандартного виведення буде виведено послідовність команд set для відтворення поточних значень параметрів.
- -p
- Увімкнути привілейований режим. У цьому режимі обробка файлів $ENV і $BASH_ENV не виконуватиметься, функції оболонки не успадковуватимуть середовище, а змінні SHELLOPTS, BASHOPTS, CDPATH і GLOBIGNORE, якщо вони є у середовищі, буде проігноровано. Якщо оболонку буде запущено від ідентифікатора ефективного користувача (групи), який не збігається із ідентифікатор справжнього користувача (групи) і не вказано параметр -p, ідентифікатор користувача буде змінено на ідентифікатор справжнього користувача, і ці дії буде виконано для ідентифікатора справжнього користувача. Якщо під час запуску вказано параметр -p, скидання ідентифікатор ефективного користувача не відбуватиметься. Вимикання цього параметра призведе до того, що ідентифікатори ефективного користувача і групи буде встановлено за значеннями ідентифікаторів справжнього користувача і групи.
- -r
- Увімкнути обмежений режим оболонки. Встановлення цього параметра не можна скасувати після того, як його було встановлено.
- -t
- Вийти після прочитання й виконання однієї команди.
- -u
- Вважати наявність змінних і параметрів, окрім особливих параметрів «@» і «*» або змінних-масивів із підписами «@» або «*», без встановлених значень помилкою при виконанні розгортання параметрів. Якщо буде зроблено спробу розгорнути змінну або параметр без встановленого значення, оболонка виведе повідомлення про помилку і, якщо вона працює не в інтерактивному режимі, завершить роботу із ненульовим станом виходу.
- -v
- Друкувати входові рядки оболонки під час виконання.
- -x
- Після розгортання усіх простих команд, команди for, команди case, команди select та арифметичної команди for вивести розгорнуте значення PS4, потім команду і її розгорнуті аргументи або пов'язаний список слів.
- -B
- Оболонка виконує розкриття фігурних дужок (див. Brace Expansion above). Типово увімкнено.
- -C
- Якщо встановлено, bash не перезаписуватиме наявний файл, якщо використано оператори переспрямовування >, >& та <>. Перезапису при створення файлів виведених даних у таких випадках можна досягти використанням оператора переспрямовування >| замість >.
- -E
- Якщо встановлено, будь-які пастки на ERR буде успадковано функціями оболонки, заміною команд та командами, які виконують у середовищі підоболонок. У таких випадках, за звичних умов, пастка ERR не успадковується.
- -H
- Увімкнути підставлення за журналом у стилі !. Цей параметр буде типово використано, якщо оболонка є інтерактивною.
- -P
- Якщо встановлено, оболонка не розв’язує символьних посилань під час виконання таких команд, як cd, які змінюють поточний робочий каталог. Натомість вона використовує фізичну структуру каталогів. Типово, bash, під час виконання команд, які змінюють поточний каталог, дотримується логічного ланцюжка каталогів.
- -T
- Якщо встановлено, будь-які пастки на DEBUG і RETURN буде успадковано функціями оболонки, заміною команд та командами, які виконують у середовищі підоболонок. У таких випадках, за звичних умов, пастки DEBUG і RETURN не успадковуються.
- --
- Якщо за цим параметром не вказано аргументів, значення позиційних параметрів буде скасовано. Якщо аргументи вказано, позиційним параметрам буде надано значення за аргументами, навіть якщо деякі з них починатимуться з -.
- -
- Сигналізує про закінчення варіантів, спричиняє присвоєння решти аргументів позиційним параметрам. Параметри -x і -v вимикаються. Якщо аргументів немає, позиційні параметри не змінюються.
Типово параметри вимкнено, якщо не вказано інше. Використання + замість - призводить до вимкнення цих параметрів. Параметри також можна вказати як аргументи для виклику оболонки. Поточний набір параметрів можна знайти в $-. Стан повернення завжди істинний, якщо не зустрічається недійсний параметр.
- shift [n]
- Позиційні параметри з n+1 ... перейменовуються на $1 .... Параметри, представлені числами від $# вниз до $#-n+1 втрачають значення. n має бути невід’ємним числом, меншим або рівним $#. Якщо n дорівнює 0, параметрине змінюються. Якщо n не задано, воно вважається рівним 1. Якщо n більше від $#, позиційні параметри не змінюються. Якщо n більше від $# або менше від нуля, повертається стан більший від нуля; в іншому випадку - 0.
- shopt [-pqsu] [-o] [назва_параметра ...]
- Перемикає значення параметрів, які керують необов’язковою поведінкою оболонки. Налаштування можуть бути перерахованими нижче, або, якщо використовується параметр -o, доступні з параметром -o вбудованої команди set. Без параметрів або з параметром -p, виводиться список усіх параметрів, які можна налаштувати, із зазначенням того, чи встановлено кожен із них; якщо задано optnames, вивід обмежується цими параметрами. Параметр -p призводить до виведення у формі, яку можна повторно використати як вхідні дані. Інші параметри мають такі значення:
- -s
- Увімкнути (встановити) кожен optname.
- -u
- Вимкнути (скинути) кожен optname.
- -q
- Пригнічує звичайне виведення (тихий режим); стан повернення вказує, встановлено чи ні optname. Якщо для optname передано багато аргументів із -q, якщо всі optnames, увімкнено, повертається стан нуль; в іншому випадку - відмінний від нуля.
- -o
- Обмежує значення назви_параметра тими назвами, які було визначено для параметра -o вбудованої команди set.
Якщо -s або -u використано без аргументів optname, shopt показує лише ті параметри, які встановлено або вимкнено відповідно. Якщо не зазначено інше, то параметри shopt типово вимкнено (не встановлено).
Стан повернення при переліку параметрів дорівнює нулю, якщо всі optnames увімкнено, в іншому випадку - відмінний від нуля. Під час встановлення або скасування параметрів статус повернення дорівнює нулю, крім випадку, коли optname не є дійсним параметром оболонки.
Список параметрів shopt:
- assoc_expand_once
- Якщо встановлено, оболонка пригнічує багаторазове обчислення індексів асоціативного масиву протягом обчислення значення арифметичного виразу, під час виконання вбудованих програм, які можуть виконувати присвоювання змінних, і під час виконання вбудованих модулів, які виконують розіменування масивів.
- autocd
- Якщо встановлено, назва команди, яка є назвою каталогу, виконується так, ніби вона є аргументом для команди cd. Цей параметр використовують лише інтерактивні оболонки.
- cdable_vars
- Якщо встановлено, аргумент вбудованої команди cd, який не є каталогом, вважається назвою змінної, значенням якої є каталог, до якого слід перейти.
- cdspell
- Якщо встановлено, незначні помилки в написанні компонента каталогу в команді cd буде виправлено. Виявляються помилки: символи в іншому регістрі, відсутній символ та один зайвий символ. Якщо помилку знайдено, друкується виправлена назва файлу, і команда продовжується. Цей параметр використовується лише інтерактивними оболонками.
- checkhash
- Якщо встановлено, bash перевіряє, чи існує команда, знайдена в геш-таблиці, перш ніж спробувати її виконати. Якщо гешована команда більше не існує, виконується звичайний пошук шляху.
- checkjobs
- Якщо встановлено, bash, перед виходом з інтерактивної оболонки, перелічує стани будь-яких зупинених і виконуваних завдань. Якщо виконуються якісь завдання, це призводить до того, що вихід буде відкладено до наступної спроби виходу без відповідної команди (див. вище КЕРУВАННЯ ЗАВДАННЯМИ above). Оболонка завжди відкладає вихід, якщо якісь завдання зупинено.
- checkwinsize
- Якщо встановлено, bash після кожної зовнішньої (не вбудованої) команди перевіряє розмір вікна та, якщо необхідно, оновлює значення LINES і COLUMNS. Типово цей параметр увімкнено.
- cmdhist
- Якщо встановлено, bash намагається зберегти всі рядки багаторядкової команди в одному записі журналу. Це дозволяє легко повторно редагувати багаторядкові команди. Цей параметр типово увімкнено, але діє він лише в тому випадку, якщо ввімкнено історію команд, як описано above у розділі ЖУРНАЛ.
- compat31
- compat32
- compat40
- compat41
- compat42
- compat43
- compat44
- compat50
- Ці аспекти контролю режиму сумісності оболонки (див. SHELL COMPATIBILITY MODE below).
- complete_fullquote
- Якщо встановлено, bash під час завершення бере в лапки всі метасимволи оболонки в назвах файлів і каталогів. Якщо не встановлено, bash видаляє метасимволи, такі як знак долара, з набору символів, які братимуться в лапки в заповнених назвах файлів, коли ці метасимволи з’являться в посиланнях на змінні оболонки в словах, які потрібно заповнити. Це означає, що знаки долара в назвах змінних, які розгортаються до каталогів, не будуть у лапках; однак будь-які знаки долара, що з'являються в назвах файлів, також не будуть у лапках. Це активне лише тоді, коли bash використовує зворотні похилі риски для обмеження повних назв файлів. Цю змінну типово встановлено, що є типовою поведінкою bash у версіях до 4.2.
- direxpand
- Якщо встановлено, bash, під час доповнення назв файлів, замінює назви каталогів результатами розширення слів. Це змінює вміст буфера редагування readline. Якщо ні, bash намагається зберегти те, що ввів користувач.
- dirspell
- Якщо встановлено, bash намагається виправити помилки в назвах каталогів під час доповнення слів, якщо каталогу зі введеною назвою не існує.
- dotglob
- Якщо встановлено, bash включає в результати розгортання шляхів назви файлів, які починаються з `.'. Назви файлів “.” і “..” завжди мають відповідати явно, навіть якщо встановлено dotglob.
- execfail
- Якщо встановлено, неінтерактивна оболонка не закриється, якщо вона не зможе виконати файл, зазначений як аргумент для вбудованої команди exec. Інтерактивна оболонка не закриється в разі невдачі exec.
- expand_aliases
- Якщо встановлено, альтернативи буде розгорнуто так, як це описано above у розділі АЛЬТЕРНАТИВИ. Типово цей параметр увімкнено для інтерактивних оболонок.
- extdebug
- Якщо встановлено на моменти виклику оболонки або у файлі запуску оболонки, налаштувати виконання профілю діагностики до запуску оболонки так само, як у параметрі --debugger. Якщо встановлено після виклику оболонки, буде увімкнено таку поведінку для використання засобів діагностики:
- 1.
- Параметр -F вбудованої команди declare призводить до виведення назви файла початкового коду та номера рядка для усіх функцій, назви яких передано як аргумент.
- 2.
- Якщо команда яку запущено пасткою DEBUG повертає ненульове значення, наступну команду буде пропущено і не виконано.
- 3.
- Якщо команда, яку віддано пасткою DEBUG, повертає значення 2, і оболонка виконується у підпрограмі (функції оболонки або скрипті оболонки, які запущено вбудованими командами . і source), оболонка імітує виклик return.
- 4.
- BASH_ARGC і BASH_ARGV буде оновлено так, як це описано у їхніх описах above).
- 5.
- Буде увімкнено трасування функцій: заміна команд, функції оболонки та підоболонки, які викликає за допомогою ( команда ) успадкують пастки DEBUG і RETURN.
- 6.
- Буде увімкнено трасування помилок: заміна команд, функції оболонки та підоболонки, які викликає за допомогою ( команда ) успадкують пастку ERR.
- extglob
- Якщо встановлено, будуть увімкнені функції розширеного зіставлення шаблонів, описані above у розділі Розгортання шляхів.
- extquote
- Якщо встановлено, рядки беруться в лапки $'рядок' і $"рядок" у межах розширень ${параметрів}, узятих у подвійні лапки. Цей параметр типово увімкнено.
- failglob
- Якщо встановлено, шаблони, які не відповідають назвам файлів під час розгортання шляху, призводять до помилки розгортання.
- force_fignore
- Якщо встановлено, суфікси, визначені змінною оболонки FIGNORE, призводять до нехтування слів під час доповнювання слів, навіть якщо нехтувані слова є єдиними можливими доповненнями. Див. підзаголовок ЗМІННІ ОБОЛОНКИ above , де наведено опис FIGNORE. Цей параметр типово увімкнено.
- globasciiranges
- Якщо встановлено, вирази діапазону, які використовуються у виразах відповідності шаблону з дужками (див. Відповідність за взірцем above) під час порівнянь поводяться як у традиційній мові C. Тобто послідовність зіставлення поточного мовного стандарту не враховується, тому b не буде зіставлятися між A і B, а символи ASCII верхнього та нижнього регістру будуть порівнюватися разом.
- globskipdots
- Якщо встановлено, розгортання шляхів ніколи не встановлюватиме відповідність назвам файлів “.” і “..”, навіть якщо взірець починається з “.”. Цей параметр типово увімкнено.
- globstar
- Якщо встановлено, шаблон **, який використовується в контексті розгортання шляху, відповідає всім файлам і нулю або більше каталогів і підкаталогів. Якщо за шаблоном йде /, до уваги беруться лише каталоги та підкаталоги.
- gnu_errfmt
- Якщо встановлено, повідомлення про помилки оболонки записуються у стандартному форматі повідомлень про помилки GNU.
- histappend
- Якщо встановлено, то список журналу, коли оболонка завершує роботу, додається до файлу, названого значенням змінної HISTFILE, а не перезаписує його.
- histreedit
- Якщо встановлено, і використовується readline, користувачу надається можливість повторно відредагувати невдалe підстановку журналу.
- histverify
- Якщо встановлено, і використовується readline, результати підставлення журналу не відразу передаються до обробника оболонки. Замість цього отриманий рядок завантажується в буфер редагування readline, що дозволяє вносити подальші зміни.
- hostcomplete
- Якщо встановлено, і використовується readline, bash спробує доповнити назву вузла, коли доповнюється слово, що містить @ (див. Доповнення у розділі READLINE above). Типово увімкнено.
- huponexit
- Якщо встановлено, то при завершенні роботи інтерактивної оболонки для входу bash надсилатиме всім завданням SIGHUP.
- inherit_errexit
- Якщо встановлено, заміна команд успадкує значення параметра errexit, замість скасування встановлення для нього значення у середовищі підоболонки. Цей параметр буде увімкнено, якщо увімкнено режим posix.
- interactive_comments
- Якщо встановлено, в інтерактивній оболонці слово, що починається на #, та решту символів у цьому рядку буде знехтувано (див. КОМЕНТАРІ above). Цей параметр типово увімкнено.
- lastpipe
- Якщо встановлено і керування завданнями неактивне, оболонка запускає останню команду конвеєра, який не виконується у фоновому режимі в поточному середовищі оболонки.
- lithist
- Якщо встановлено, а параметр cmdhist увімкнено, багаторядкові команди зберігаються в журналу з вбудованими новими рядками, а не з розділенням крапки з комою, де це можливо.
- localvar_inherit
- Якщо встановлено, локальні змінні успадковують значення та атрибути однойменної змінної, яка існує в попередній області дії до того, як буде присвоєно нове значення. Атрибут nameref не успадковується.
- localvar_unset
- Якщо встановлено, виклик unset для локальних змінних у попередніх областях видимості функції позначає їх, тому наступні пошуки знайдуть їх не встановленими до виходу з цієї функції. Це ідентично скасуванню встановлення локальних змінних у поточній області видимості функції.
- login_shell
- Оболонка встановлює цей параметр, якщо вона запущена як оболонка для входу (див. ВИКЛИК above). Значення не можна змінювати.
- mailwarn
- Якщо встановлено, і файл, який bash перевіряє на наявність пошти, був доступним від моменту останньої перевірки, виводиться повідомлення «Пошту в поштовий_файл прочитано».
- no_empty_cmd_completion
- Якщо встановлено, і використовується readline, bash не намагатиметься шукати можливе доповнення в PATH, якщо спроба доповнення буде здійснюватися в порожньому рядку.
- nocaseglob
- Якщо встановлено, bash встановлюватиме відповідність назв файлів із врахуванням регістру при розгортанні шляхів (див. Розгортання шляхів above).
- nocasematch
- Якщо встановлено, bash встановлюватиме відповідність взірців без врахування регістру символів при виконанні команд-умов case та [[, при виконанні розгортання слів із заміною за взірцем або при фільтрування можливих доповнень при програмованому доповненні.
- noexpand_translation
- Якщо встановлено, bash братиме трансльований результат нейтралізації $"..." у одинарні лапки замість подвійних. Якщо рядок не буде трансльовано, цей параметр ні на що не впливатиме.
- nullglob
- Якщо встановлено, bash дозволятиме розгортання шаблонів, які не відповідають жодному файлу (див. Розгортання шляхів above) , у порожній рядок, а не у сам взірець.
- patsub_replacement
- Якщо встановлено, bash не розгортатиме & у рядку-заміннику при підставлянні за взірцем до тексту, який відповідає взірцю, як це описано у розділі Розгортання параметрів above. Цей параметр типово увімкнено.
- progcomp
- Якщо встановлено, буде увімкнено можливості програмованого доповнення (див. Програмоване доповнення above) . Типово, цей параметр увімкнено.
- progcomp_alias
- Якщо встановлено, буде увімкнено програмоване доповнення, bash оброблятиме назву команди, яка не має жодних варіантів доповнення, як можливу альтернативу і виконуватиме розгортання альтернатив. Якщо у команди є альтернатива, bash спробує виконати програмоване доповнення з використанням слова команди, яке є результатом розгортання альтернативи.
- promptvars
- Якщо встановлено, рядки запиту підлягатимуть розгортанню параметрів, заміні команд, арифметичним обчисленням та вилученню нейтралізації після розгортання, яке описано у розділі ЗАПИТИ above. Цей параметр типово увімкнено.
- restricted_shell
- Оболонка встановлює цей параметр, якщо її запущено у обмеженому режимі (див. ОБМЕЖЕНА ОБОЛОНКА below). Значення параметра змінювати не можна. Значення параметра не буде повторно встановлено під час виконання файлів запуску, що уможливлює визначення у файлах запуску того, чи запущено оболонку в обмеженому режимі.
- shift_verbose
- Якщо встановлено, вбудована команда shift виводитиме повідомлення про помилку, якщо лічильник зсуву перевищуватиме за значенням кількість позиційних параметрів.
- sourcepath
- Якщо встановлено, вбудована команда . (source) використовуватиме значення змінної PATH для пошуку каталогу, який містить файл, переданий як аргумент. Типово, цей параметр увімкнено.
- varredir_close
- Якщо встановлено, оболонка автоматично закриватиме дескриптори файлів, значення яких визначено за допомогою синтаксису переспрямування {назва-змінної} (див. ПЕРЕСПРЯМУВАННЯ above) замість полишення їх відкритими при завершенні роботи команди.
- xpg_echo
- Якщо встановлено, вбудована команда echo типово розгортатиме послідовності символів із екрануванням символом зворотної похилої риски.
- suspend [-f]
- Призупинити виконання цієї оболонки, аж доки вона не отримає сигналу SIGCONT. Роботу оболонки входу до системи або оболонки без увімкненого керування завданнями не можна призупиняти; для перевизначення цієї поведінки і примусового призупинення роботи можна скористатися параметром -f. Буде повернуто стан 0, якщо оболонка не є оболонкою входу до системи або не увімкнено керування завданнями і не вказано параметр -f.
- test вираз
- [ вираз ]
- Повернути
стан 0
(істина)
або 1
(хибність),
залежно
від
обчисленого
значення
виразу
умови
вираз.
Кожен
оператор і
операнд
має бути
окремим
аргументом.
Вирази
складаються
з основних
елементів,
які
описано above у
розділі
УМОВНІ
ВИРАЗИ. test
не приймає
ніяких
параметрів,
а також не
приймає і
ігнорує
аргумент --
як
позначку
завершення
параметрів.
Вирази можна поєднувати за допомогою зазначених нижче операторів. Оператори у списку вказано за пріоритетністю. Обчислення залежить від кількості аргументів. Див. нижче. Якщо аргументів п'ять або більше, буде використано пріоритетність операторів.
- ! вираз
- Істина, якщо вираз є хибним.
- ( вираз )
- Повертає значення виразу вираз. Цим можна скористатися для перевизначення звичайної пріоритетності операторів.
- вираз -a вираз2
- Істина, якщо обидва, вираз1 і вираз2, мають значення true.
- вираз1 -o вираз2
- Істина, якщо вираз1 або вираз2 має значення true.
test і [ обчислюють умовні виразу з використанням набору правил на основі кількості аргументів.
- 0 аргументів
- Вираз є хибним.
- 1 аргумент
- Вираз є істинним тоді і лише тоді, коли аргумент не є порожнім.
- 2 аргументи
- Якщо першим аргументом є !, вираз є істинним тоді і лише тоді, коли другий аргумент є порожнім. Якщо перший аргумент є одним із унарних умовних операторів зі списку у розділі УМОВНІ ВИРАЗИ above , вираз є істинним, якщо обчислення унарного оператора дає значення «істина». Якщо першим аргументом не є коректний унарний умовний оператор, вираз буде хибним.
- 3 аргументи
- Вказані нижче умови буде застосовано за порядком, який визначає для них список. Якщо другим аргументом буде один із двійкових операторів умов, список яких наведено у розділі УМОВНІ ВИРАЗИ above , результатом обчислення виразу буде результат двійкової перевірки, операндами якої будуть перший і третій аргументи. Оператори -a і -o вважаються двійковими операторами, якщо у них три аргументи. Якщо першим аргументом є !, значенням буде заперечення двоаргументної перевірки, у якій використано другий і третій аргументи. Якщо першим аргументом є (, а третім — ), результатом буде результат одноаргументної перевірки другого аргументу. В усіх інших випадках результатом обчислення виразу буде «хибність».
- 4 аргументи
- До порядку, у якому буде побудовано список, застосовують вказані нижче умовні оператори. Якщо першим аргументом є !, результат буде запереченням виразу, що складається з решти трьох аргументів. Для двоаргументної перевірки буде використано другий і третій аргументи. Якщо першим аргументом є (, а четвертим — ), результатом буде двоаргументна перевірка за другим і третім аргументами. В інших випадках буде виконано обробку і обчислення виразу відповідно до пріоритетності, яку використано у правилах з наведеного вище списку.
- 5 або більше аргументів
- Вираз буде оброблено і обчислено відповідно до пріоритетності з використанням наведених вище правил.
Якщо використано test або [, оператори < і > лексикографічно упорядковуватимуться з використанням порядку ASCII.
- times
- Вивести сукупний час використання процесора завданнями користувача і системи для оболонки і процесів, які було запущено оболонкою. Станом повернення є 0.
- trap [-lp] [[аргумент] специфікація_сигналу ...]
- Встановити,
що при
отриманні
оболонкою
сигналів
специфікація_сигналу
має бути
прочитано
і виконано
команду
аргумент.
Якщо
аргумент
не вказано
(і вказано
єдину
специфікацію_сигналу)
або -, для
усіх
вказаних
сигналів
буде
відновлено
початкову
обробку
(значення,
які вони
мали перед
входом до
оболонки).
Якщо
значенням
аргументу
є порожній
рядок,
сигнал,
який
вказано
специфікацією_сигналу
буде
проігноровано
оболонкою
та
командами,
які вона
викликає.
Якщо
аргумент
не вказано
і вказано
-p, буде
виведено
команди
пастки, які
пов'язано
із кожним
сигналом
із
специфікації_сигналу.
Якщо не
вказано
аргументів
або
вказано
лише -p, trap
виведе
список
команд, які
пов'язано з
кожним із
сигналів.
Використання
параметра
-l призведе
до того, що
оболонка
виведе
список
назв
сигналів
та
відповідних
їм чисел.
Кожен
запис
специфікації_сигналу
є або
назвою
сигналу,
яку
визначено
у <signal.h>, або
номером
сигналу. У
назвах
сигналів
слід
зберігати
регістр
символів.
Префікс SIG
є
необов'язковим.
Якщо специфікацією_сигналу є EXIT (0), при виході з оболонки буде виконано команду аргумент. Якщо значенням специфікації_сигналу є DEBUG, команду аргумент буде виконано перед кожною простою командою, командою for, командою case, командою select, будь-якою арифметичною командою for і перед першою командою, яку буде виконано у функції оболонки (див. ГРАМАТИКА ОБОЛОНКИ above). Зверніться до опису параметра extdebug вбудованої команди shopt, щоб дізнатися більше про його вплив на пастку DEBUG. Якщо значенням специфікація_сигналу є RETURN, команду аргумент буде виконано кожного разу, коли завершуватиме виконання функції оболонки або скрипту, який виконується із використанням вбудованих команд . і source.
Якщо специфікацією_сигналу є ERR, команду аргумент буде виконано кожного разу, коли конвеєр (який може складатися з однієї простої команди), список або складена команда повертає ненульовий стан виходу, відповідно до наведених нижче умов. Пастку ERR не буде виконано, якщо команда з помилкою є частиною списку команд, одразу за яким вказано ключове слово while або until, частину перевірки в інструкції if, частину команди, яка виконується у списку && або ||, окрім команди за останнім && або ||, будь-якою командою у конвеєрі, окрім останньої, або якщо повернене командою значення заперечено за допомогою !. Це ті самі умови, які використовують для параметра errexit (-e).
Сигнали, знехтувані при вході в оболонку, не можна захопити або скинути. Перехоплені сигнали, які не нехтуються, скидаються до початкових значень у підоболонці або середовищі підоболонки, коли вона створюється. Стан повернення false, якщо будь-який sigspec недійсний; інакше trap повертає true.
- type [-aftpP] назва [назва ...]
- Без параметрів вказує, як буде інтерпретовано кожну назву, якщо її використати як назву команди. Якщо використовується параметр -t, type друкує один із рядків alias, keyword, function, builtin або file, якщо name є псевдонімом, зарезервованим словом оболонки, функцією, вбудованою програмою або файлом на диску відповідно. Якщо назву не знайдено, то нічого не друкується, і повертається стан виходу false. Якщо використовується параметр -p, type повертає назву дискового файлу, який буде виконано, якщо назву вказано як назву команди, або нічого, якщо ``type -t name'' не повертає файл. Параметр -P змушує шукати PATH для кожної назви, навіть якщо ``type -t name'' не повертає файл. Якщо команда гешується, -p і -P друкують гешоване значення, яке не обов’язково є файлом, який з’являється першим у PATH. Якщо використовується параметр -a, type друкує всі місця, які містять виконуваний файл з назвою назва. Сюди входять псевдоніми та функції, якщо і тільки якщо параметр -p також не використовується. Під час використання -aтаблиця гешованих команд не переглядається. Параметр -f пригнічує пошук функції оболонки, як і у вбудованій команді command. type повертає true, якщо всі аргументи знайдено, false, якщо жодного не знайдено.
- ulimit [-HS] -a
- ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [обмеження]]
- Забезпечує керування ресурсами, доступними для оболонки, і процесами, які вона запустила, в системах, які дозволяють таке керування. Параметри -H і -S визначають, що для даного ресурсу встановлено жорстку або м’яку межу. Після встановлення жорсткої межі, її не може збільшити користувач без права root; м'яку межу можна збільшити до значення жорсткої межі. Якщо не вказано ні -H, ні -S, встановлюються як м’яка, так і жорстка межі. Значенням межа може бути число в одиницях, зазначене для ресурсу, або одне зі спеціальних значень hard, soft або unlimited, які означають поточну жорстку межу, поточну м’яку межу та безліміт відповідно. Якщо значення межа опущено, виводиться поточне значення м’якої межі для ресурсу, якщо не вказано параметр -H. Якщо вказано більше одного ресурсу, перед значенням, якщо доречно, друкуються назва межі й одиниця вимірювання. Інші варіанти інтерпретуються так:
- -a
- Буде виведено звіт щодо усіх поточних обмежень; обмеження не встановлюватимуться
- -b
- Максимальний розмір буфера сокета
- -c
- Максимальний розмір створених файлів ядра
- -d
- Максимальний розмір сегмента даних процесу
- -e
- Максимальна пріоритетність планування («nice»)
- -f
- Максимальний розмір файлів, які записано оболонкою та її дочірніми процесами
- -i
- Максимальна кількість сигналів у черзі
- -k
- Максимальна кількість k-черг, які можна розмістити у пам'яті
- -l
- Максимальний розмір, який може бути заблоковано у пам'яті
- -m
- Максимальний розмір резидентного набору (у багатьох системах це обмеження не береться до уваги)
- -n
- Максимальна кількість відкритих дескрипторів файлів (більшість систем не дозволяють встановлення цього значення)
- -p
- Розмір каналу у 512-байтових блоках (може бути не встановлено)
- -q
- Максимальна кількість байтів у чергах повідомлень POSIX
- -r
- Максимальна пріоритетність планування у режимі реального часу
- -s
- Максимальний розмір стека
- -t
- Максимальний обсяг часу процесора у секундах
- -u
- Максимальна кількість процесів, які доступні для одного користувача
- -v
- Максимальний об'єм віртуальної пам'яті, яка доступна для оболонки, і, у деяких системах, для її дочірніх процесів
- -x
- Максимальна кількість блокувань файлів
- -P
- Максимальна кількість псевдотерміналів
- -R
- Максимальний час, протягом якого процес реального часу може виконуватися без блокування, у мікросекундах
- -T
- Максимальна кількість потоків обробки
Якщо вказано обмеження і не використано параметр -a, обмеження стане новим значенням вказаного ресурсу. Якщо не вказано жодного параметра, буде використано параметр -f. Кроком зростання значень є 1024 байтів, окрім варіанта з -t, для якого кроком є секунди; -R, для якого кроком є мікросекунди; -p, для якого одиницями є блоки у 512 байтів; -P, -T, -b, -k, -n і -u, для яких значення є безрозмірними; та у режиму posix -c і -f, для яких кроком зростання є 512 байтів. Повернутим станом є 0, якщо немає некоректних параметрів або аргументів і встановлення нового обмеження виконано без помилок.
- umask [-p] [-S] [режим]
- Встановити для маски створення файлів користувачем значення режим. Якщо режим починається з цифри, він вважатиметься записом у вісімковій системі числення; в усіх інших випадках, він вважатиметься записом символічної маски режиму, подібним до того, який приймає команда chmod(1). Якщо режим не вказано, буде виведено поточне значення маски. Використання параметра -S призведе до виведення маски у символічній формі. Типовим режимом виведення є режим вісімкових чисел. Якщо вказано параметр -p і не вказано режим, дані буде виведено у форматі, яким можна скористатися як вхідними даними. Станом повернення буде 0, якщо режим було змінено успішно або якщо не було вказано аргументу режим. В усіх інших випадках станом повернення буде «хибність».
- unalias [-a] [назва ...]
- Вилучити усі назви назва зі списку визначених альтернатив. Якщо вказано -a, буде вилучено усі визначення альтернатив. Повернутим значенням буде «істина», якщо вказана назва є визначеною альтернативою.
- unset [-fv] [-n] [назва ...]
- Для кожної назви вилучити відповідну змінну або функцію. Якщо вказано параметр -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 [-fn] [-p назва_змінної] [ідентифікатор ...]
- Зачекати на завершення усіх вказаних дочірніх процесів і повернути їхній стан завершення роботи. Кожен ідентифікатор має бути ідентифікатором процесу або специфікацією завдання. Якщо задано специфікацію завдання, оболонка чекатиме за завершення усіх процесів у конвеєрі завдання. Якщо ідентифікатор не вказано, wait чекатиме на завершення усіх завдань у фоновому режимі і заміни останнього виконаного процесу, якщо його ідентифікатор процесу збігається із ідентифікатором процесу $!, і стан повернення рівний нулеві. Якщо вказано параметр -n, wait чекатиме на завершення одинарного завдання зі списку ідентифікаторів. Якщо ж ідентифікаторів не вказано, чекатиме на завершення будь-якого завдання і поверне його стан виходу. Якщо жоден із вказаних аргументів не є ідентифікатором дочірнього процесу оболонки або не вказано жодних аргументів, і оболонка не має дочірніх процесів, на завершення яких можна було б чекати, станом виходу буде 127. Якщо вказано параметр -p, ідентифікатор процесу або завдання, для якого буде повернуто стан виходу, стане значенням змінної назва_змінної, яку вказано аргументом параметра. На початку, значення цієї змінної не буде встановлено. Це корисно, лише якщо вказано параметр -n. Якщо вказати параметр -f із увімкненим керуванням завданнями, wait чекатиме на завершення завдання ідентифікатор, перш ніж повертати стан його виходу, замість простого повернення значення при зміні стану. Якщо ідентифікатор задає процес або завдання, яких не існує, станом повернення буде 127. Якщо wait буде перервано сигналом, станом повернення буде число, яке є більшим за 128, як це описано у розділі СИГНАЛИ 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 та пізніших версій.
- •
- взяття у лапки правої частини рівності оператора встановлення відповідності за формальним виразом у команді [[ (=~) не має особливого ефекту
- •
- переривання списку команд, подібного до «a ; b ; c», спричиняє виконання наступної команди у списку (у bash-4.0 та пізніших версіях оболонка поводить себе так, наче отримано переривання, отже, переривання однієї команди у списку перериває виконання усього списку)
- •
- оператори < і > команди [[ не враховують поточну локаль при порівнянні рядків; буде використано упорядковування за 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); у пізніших версіях одинарні лапки не вважаються особливим символом у розгортання у подвійних лапках
- оболонка не виводить повідомлення із попередженням, якщо буде виконано спробу скористатися встановленням складеного значення у лапках як аргументом declare (declare -a foo='(1 2)'). У пізніших версіях попередження щодо використання таких синтаксичних конструкцій вважається застарілим
- помилки розгортання слів вважаються нефатальними помилками, які призводять до збою поточної команди, навіть у режимі 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 обробляє спроби скасувати підписи масиву @ і * по-різному, залежно від того, є масив індексованим чи асоціативним, та інакше від попередніх версій.
ОБМЕЖЕНА ОБОЛОНКА¶
Якщо bash запущено з назвою rbash, або під час виклику додано параметр -r, оболонка стає обмеженою. Обмежена оболонка використовується для налаштування середовища, більш керованого, ніж стандартна оболонка. Вона поводиться як bash, за винятком того, що не виконуються або заборонені такі дії:
- зміна каталогів за допомогою cd
- встановлення значення або скасовування встановлення значення SHELL, PATH, HISTFILE, ENV та BASH_ENV
- задання назв команд, які містять /
- задання назви файла, яка містить /, як аргументу вбудованої команди .
- задання назви файла, що містить символ похилої риски, як аргументу вбудованої команди history
- задання назви файла, що містить символ похилої риски, як аргументу параметра -p вбудованої команди hash
- імпортування визначень функцій із середовища оболонки під час запуску
- обробка значення SHELLOPTS із середовища оболонки під час запуску
- переспрямування виводу з використанням операторів переспрямування >, >|, <>, >&, &>, і >>
- використання вбудованої команди exec для заміни оболонки іншою командою
- додавання або вилучення вбудованих команд за допомогою параметрів -f і -d вбудованої команди enable
- використання вбудованої команди enable для вмикання вимкненої вбудованої команди оболонки
- додавання параметра -p до вбудованої команди command
- вимикання обмеженого режиму за допомогою set +r або shopt -u restricted_shell.
Ці обмеження буде примусово застосовано після читання усіх файлів запуску.
When a command that is found to be a shell script is executed (see COMMAND EXECUTION above), rbash вимикає усі обмеження щодо виконання скрипту у запущеній оболонці.
ДИВ. ТАКОЖ¶
- Bash Reference Manual, Brian Fox і Chet Ramey
- The Gnu Readline Library, Brian Fox і Chet Ramey
- The Gnu History Library, Brian Fox і Chet Ramey
- Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE --
- http://pubs.opengroup.org/onlinepubs/9699919799/
- 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
- Загальносистемний файл ініціалізації, який буду виконано для оболонок входу до системи
- /etc/bash.bashrc
- Загальносистемний файл запуску для окремої інтерактивної оболонки
- /etc/bash.bash.logout
- Загальносистемний файл чищення оболонки входу до системи, який буде виконано під час завершення роботи оболонки входу до системи
- ~/.bash_profile
- Особистий файл ініціалізації, який буду виконано для оболонок входу до системи
- ~/.bashrc
- Індивідуальний файл запуску для окремої інтерактивної оболонки
- ~/.bash_logout
- Індивідуальний файл чищення оболонки входу до системи, який буде виконано під час завершення роботи оболонки входу до системи
- ~/.bash_history
- Типове значення HISTFILE, файл, у якому bash зберігає журнал команд
- ~/.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 для надсилання звіту щодо вади. Якщо ви знаєте, як виправити ваду, будемо раді, якщо ви повідомите нам про це! Пропозиції та «філософські» звіти про вади варто спрямовувати на адресу bug-bash@gnu.org або розміщувати у групі новин Usenet gnu.bash.bug.
До УСІХ звітів щодо вад має бути включено:
- Номер версії bash
- Дані щодо обладнання та операційної системи
- Дані щодо компілятора, використаного для збирання програми
- Опис поведінки програми під час відтворення вади
- Короткий скрипт або «рецепт», виконання якого призводить до проявів вади
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.
19 вересня 2022 року | GNU Bash 5.2 |