Scroll to navigation

BASH(1) General Commands Manual BASH(1)

НАИМЕНОВАНИЕ

bash - Оболочка GNU Bourne-Again

ОБЗОР

bash [options] [command_string | file]

АВТОРСКИЕ ПРАВА

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

ОПИСАНИЕ

Bash - это интерпретатор командного языка, который выполняет команды, считываемые из стандартного ввода, из командной строки или из файла. Это повторная и дополненная реализация оболочки Bourne, исторического интерпретатора командного языка Unix. Bash также включает в себя полезные функциональные возможности оболочек Korn и C (ksh и csh).

POSIX - это название семейства компьютерных стандартов, основанных на Unix. Bash предназначена для того, чтобы быть соответствующей реализацией части оболочки и утилит спецификации IEEE POSIX (стандарт IEEE 1003.1). Режим Bash POSIX (далее именуемый как posix mode) изменяет поведение оболочки, когда ее работа по умолчанию отличается от стандартной, чтобы строго соответствовать стандарту. Смотрите раздел СМОТРИТЕ ТАКЖЕ ниже для получения ссылки на документ, в котором подробно описывается, как режим posix mode влияет на поведение bash. Оболочка Bash может быть настроена на соответствие POSIX по умолчанию.

ПАРАМЕТРЫ

Все односимвольные опции оболочки, описанные в описании встроенной команды set, включая -o, могут использоваться в качестве опций при вызове оболочки. Кроме того, bash интерпретирует следующие опции при вызове:

Если присутствует опция -c, то команды считываются из первого, не содержащего опции, аргумента командной строки command_string. Если после command_string есть аргументы, то первому аргументу присваивается значение $0, а значения остальных аргументов присваиваются позиционным параметрам. Присвоение значения $0 определяет название оболочки, которое используется в предупреждениях и сообщениях об ошибках.
Если присутствует опция -i, то оболочка является интерактивной.
Эта опция заставляет оболочку bash действовать так, как если бы это был вход в оболочку (смотрите раздел ВЫЗОВ ниже).
Если присутствует опция -r, то оболочка становится restricted,т.е. ограниченной оболочкой (смотрите раздел ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже).
Если присутствует опция -s или если после обработки опции не осталось аргументов, то оболочка считывает команды из стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки или при чтении входных данных через конвейер.
Выводить строки ввода оболочки по мере их считывания.
Команды и их аргументы выводятся по мере их выполнения.
Выводить список всех строк, заключенных в двойные кавычки, перед которыми в стандартном выводе стоит $. Это строки, которые подлежат переводу на другой язык, если текущая локаль не является C или POSIX. Это подразумевает опцию -n; никакие команды выполняться не будут.
[-+]O [shopt_option]
Опция shopt_option - это одна из опций оболочки, используемых встроенной командой shopt (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Если опция shopt_option определена, то -O устанавливает значение этой опции; +O отменяет его. Если опция shopt_option не определена, то bash выводит названия и значение опций оболочки, принятых shop, на стандартный вывод. Если опция вывода равна +O, то выходные данные отображаются в формате, который может быть повторно использован в качестве входных данных.
--
Символ -- сигнализирует об окончании выбора опций и отключает дальнейшую обработку опций. Любые аргументы после -- рассматриваются как название файла сценария оболочки (см. ниже) и передаются этому сценарию. Аргумент - эквивалентен --.

Оболочка Bash также интерпретирует ряд опций, состоящих из нескольких символов. Эти опции должны появиться в командной строке до того, как будут распознаны опции, состоящие из одного символа.

Сделать так, чтобы профиль отладчика был выполнен до запуска оболочки. Включает расширенный режим отладки (смотрите описание опции extdebug для встроенной команды shopt ниже).
Эквивалентно -D, но выходные данные находятся в формате GNU gettext “po” (переносимый объект).
Эквивалентно -D.
Вывести сообщение об использовании на стандартный вывод и завершить работу.
--init-file file
Execute commands from file instead of the system wide initialization file /etc/bash.bashrc and the standard personal initialization file ~/.bashrc если оболочка является интерактивной (смотрите раздел ВЫЗОВ ниже).
Эквивалентно -l.
Не использовать библиотеку GNU readline для чтения командных строк, когда оболочка является интерактивной.
Также не читать общесистемный файл запуска /etc/profile или любой из личных файлов инициализации ~/.bash_profile, ~/.bash_login, или ~/.profile. По умолчанию bash считывает эти файлы, когда она вызывается для входа в оболочку (смотрите раздел ВЫЗОВ ниже).
Do not read and execute the system wide initialization file /etc/bash.bashrc and the personal initialization file ~/.bashrc если оболочка является интерактивной. Эта опция включена по умолчанию, если оболочка вызывается как sh.
Включить режим posix; изменить поведение bash, в котором операции по умолчанию отличаются от требований стандарта POSIX так, чтобы они соответствовали стандарту.
Оболочка становится ограниченной (смотрите раздел ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже).
Эквивалентно -v.
Вывести сведения об этой версии оболочки bash на стандартный вывод и завершить работу.

АРГУМЕНТЫ

Если после обработки опции остаются аргументы, а опция -c и опция -s не были указаны, то первый аргумент обрабатывается как название файла, содержащего команды оболочки (shell script). Когда bash вызывается таким образом, то $0 присваивается название файла, а позиционным параметрам присваиваются остальные аргументы. Bash считывает и выполняет команды из этого файла, а затем завершает работу. Статус завершения Bash - это статус завершения последней команды, выполненной в скрипте. Если команды не выполняются, то статус завершения равен 0. Bash сначала пытается открыть файл в текущем каталоге и, если файл не найден, то выполняет поиск скрипта в каталогах, указанных в переменной PATH.

ВЫЗОВ

Вход в оболочку (login shell) это - тот, у которого первым символом нулевого аргумента является - или тот, который начинается с опции --login.

Интерактивная оболочка interactive shell - это оболочка, запускаемая без аргументов опций (если только не указано -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 file заставляет bash использовать file вместо etc/bash.bashrc и ~/.bashrc.

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

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

но не использует значение переменной 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, if these files exist and are readable. Bash does not read this file if invoked as sh. The --norc option inhibits this behavior, and the --rcfile option makes bash use a different file instead of ~/.bashrc, но ни rshd, ни sshd обычно не вызывают оболочку с этими опциями и не позволяют их указывать.

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

ОПРЕДЕЛЕНИЯ

В остальной части этого документа используются следующие определения.

Пробел или символ табуляции.
Символ, принадлежащий классу символов пробел space в текущей локали или для которого isspace(3) возвращает значение true.
Последовательность символов, рассматриваемая оболочкой как единое целое. Также известная как токен token.
Слово word, состоящее только из буквенно-цифровых символов и знаков подчеркивания и начинающееся с буквенного символа или знака подчеркивания. Также именуемое как идентификатор identifier.
Метасимвол metacharacter - символ, который, если он не заключен в кавычки, разделяет слова. Это может быть один из следующих символов:

| & ; ( ) < > space tab newline

Оператор управления control operator
Токен token, выполняющий функцию управления. Это один из следующих символов:

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

ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА

Зарезервированные слова Reserved words - это слова, которые имеют специальное значение для оболочки. Следующие слова распознаются как зарезервированные, если они не заключены в кавычки и являются либо первым словом команды (смотрите ниже раздел ГРАММАТИКА ОБОЛОЧКИ), либо третьим словом команды case или select (допустимо только in), либо третьим словом словом команды for (допустимы только in и do):

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

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

В этом разделе описывается синтаксис различных форматов команд оболочки.

Simple Commands

Простая команда simple command - это последовательность необязательных переменных, за которыми следуют слова (разделенные пробелом blank) и перенаправления, которые завершаются управляющим оператором control operator. Первое слово определяет команду, которая должна быть выполнена. Это слово передается в качестве нулевого аргумента. Остальные слова передаются в качестве аргументов вызываемой команды.

Возвращаемое значение простой команды simple command - это статус её завершения или 128+n, если команда завершается по сигналу n.

Pipelines

Конвейер (канал) pipeline представляет собой последовательность из одной или нескольких команд, разделенных одним из управляющих операторов | или |&. Формат конвейера следующий:

[time [-p]] [ ! ] command1 [ [||&] command2 ... ]

Стандартный вывод команды command1 подключен через канал к стандартному вводу команды command2. Это подключение выполняется перед любыми перенаправлениями, указанными в command1(смотрите раздел ПЕРЕНАПРАВЛЕНИЕ ниже). Если |& является оператором конвейера, то стандартная ошибка команд command1, в дополнение к ее стандартному выходу, связана со стандартным входом команд command2 через конвейер. Это сокращение от 2>&1 |. Это неявное перенаправление стандартной ошибки на стандартный выход выполняется после любых перенаправлений, указанных в command1.

Возвращаемый статус конвейера - это статус завершения последней команды, если только не включена опция pipefail. Если опция pipefail включена, то статус возврата конвейера равен значению последней (самой правой) команды, которая завершается с ненулевым статусом или нулю, если все команды завершаются успешно. Если зарезервированное слово ! предшествует конвейеру, то статус завершения этого конвейера является логическим отрицанием статуса завершения, как описано выше. Если конвейер выполняется синхронно, то оболочка ожидает завершения всех команд в конвейере, прежде чем возвратить значение.

Если зарезервированное слово time предшествует конвейеру, то оболочка сообщает о прошедшем времени, а также о пользовательском и системном времени, затраченном на его выполнение, когда конвейер завершается. Опция -p изменяет формат вывода на указанное POSIX . Когда оболочка находится в режиме posix, то она не распознает time как зарезервированное слово, если следующий токен начинается с “-”. Значение переменной TIMEFORMAT представляет собой строку формата, которая определяет, как должна отображаться информация о времени. Смотрите описание переменной TIMEFORMAT ниже в подразделе Переменные оболочки.

Когда оболочка находится в режиме posix, time может отображаться само по себе как единственное слово в простой команде. В этом случае оболочка отображает общее пользовательское и системное время, затраченное оболочкой и ее дочерними элементами. Переменная TIMEFORMAT определяет формат информации о времени.

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

Списки

Список list - это последовательность из одного или нескольких конвейеров, разделенных одним из операторов ;, &, && или || и необязательно завершающихся одним из ;, & или <newline>.

В этом списке операторы && и || имеют одинаковый приоритет, а за ними следуют операторы ; и &, которые также имеют одинаковый приоритет.

Вместо точки с запятой для разделения команд в списке list может присутствовать последовательность из одной или нескольких новых строк.

Если команда завершается управляющим оператором &, то оболочка выполняет команду в фоновом режиме background в подоболочке. Оболочка не ожидает завершения команды и возвращаемый статус равен 0. Они называются асинхронными asynchronous командами. Команды, разделенные символом ;, выполняются последовательно; оболочка ожидает завершения выполнения каждой команды по очереди. Статус возврата - это статус завершения последней выполненной команды.

Списки И и ИЛИ представляют собой последовательности из одного или нескольких конвейеров, разделенных управляющими операторами && и ||, соответственно. Списки И и ИЛИ выполняются с левой ассоциативностью. Список И имеет вид

command1 && command2

command2 выполняется тогда и только тогда, когда command1 возвращает нулевой статус завершения (успех).

Список ИЛИ имеет вид

command1 || command2

Команда command2 выполняется тогда и только тогда, когда команда command1 возвращает ненулевой статус завершения. Возвращаемый статус списков И и ИЛИ - это статус завершения последней команды, выполненной в списке.

Compound Commands

Составная команда compound command - это одна из следующих команд. В большинстве случаев список list в описании команды может быть отделен от остальной части команды одной или несколькими символами новой строки, за которыми может следовать новая строка вместо точки с запятой.

(list)
Список list выполняется в подоболочке (описание окружающей среды подоболочки приведено в разделе СРЕДА ВЫПОЛНЕНИЯ КОМАНД ниже). Назначение переменных и встроенные команды, влияющие на окружающую среду команды, перестают действовать после завершения выполнения команды. Статус возврата - это статус выхода из списка list.
{ list; }
Список list выполняется в текущей среде командной строки. list должен завершаться новой строкой или точкой с запятой. Это называется групповая команда group command. Статус возврата - это статус завершения списка list.
Обратите внимание, что в отличие от метасимволов ( и ), метасимволы { и } являются зарезервированными словами reserved words и должны встречаться там, где разрешено распознавание зарезервированных слов. Поскольку они не приводят к разрыву слов, то они должны быть отделены от списка listпробелом или другим метасимволом оболочки.
((expression))
Арифметическое выражение expression вычисляется в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ. Если значение выражения не равно нулю, то статус возврата равен 0; в противном случае статус возврата равен 1. Выражение expression расширяется так же, как если бы оно было заключено в двойные кавычки, но неэкранированные символы двойных кавычек в expression не обрабатываются специальным образом и удаляются. Поскольку это потенциально может привести к появлению пустых строк, эта команда обрабатывает их как выражения, значение которых равно 0.
[[ expression ]]
Вычислить условное выражение expression и вернуть нулевой (true) или ненулевой (false) статус. Выражения состоят из основных элементов, описанных ниже в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ. Слова между [[ и ]] не разделяются на слова и не расширяются названием пути. Оболочка выполняет расширение тильдой, расширение параметров и переменных, арифметическое расширение, замену команд, замену процессов и удаление кавычек в этих словах. Условные операторы, такие как -f, должны быть без кавычек, чтобы их можно было распознать как основные.
При использовании совместно с [[ операторы < и > выполняют лексикографическую сортировку с использованием текущей локали.

Смотрите описание встроенной команды test (в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ) при обработке параметров (т.е. отсутствующих параметров).

Когда используются операторы == и !=, строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в подразделе Сопоставление с шаблоном, как если бы была включена опция оболочки extglob. Оператор = эквивалентен ==. Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов. Возвращаемое значение равно 0, если строка соответствует (==) или не соответствует (!=) шаблону, и 1 в противном случае. Если какая-либо часть шаблона заключена в кавычки, заключенная в кавычки часть сопоставляется как строка: каждый символ в заключенной в кавычки части соответствует сам себе, вместо того чтобы иметь какое-либо специальное значение для сопоставления с шаблоном.
Доступен дополнительный двоичный оператор =~, имеющий тот же приоритет, что и == и !=. При его использовании строка справа от оператора считается POSIX расширением регулярного выражения и соответствующим образом согласованным (используя интерфейсы POSIX regcomp и regexec, обычно описываемым в regex(3)). Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически некорректно, возвращаемое значение условного выражения равно 2. Если включена опция оболочки nocasematch, сопоставление выполняется без учета регистра буквенных символов.
Если какая-либо часть шаблона заключена в кавычки, то часть, заключенная в кавычки, сопоставляется буквально, как указано выше. Если шаблон хранится в переменной оболочки, то при расширении переменной, заключенной в кавычки, весь шаблон должен быть сопоставлен буквально. Внимательно относитесь к выражениям в квадратных скобках в регулярных выражениях, поскольку обычные кавычки и шаблонные символы теряют свое значение между квадратными скобками.
Совпадение завершается успешно, если шаблон соответствует какой-либо части строки. Закрепите шаблон с помощью операторов регулярных выражений ^ и $, чтобы заставить его соответствовать всей строке.
Переменная массива BASH_REMATCH записывает, какие части строки соответствуют шаблону. Элемент BASH_REMATCH с индексом 0 содержит часть строки, соответствующую всему регулярному выражению. Подстроки, соответствующие вложенным в скобки выражениям в регулярном выражении, сохраняются в остальных индексах BASH_REMATCH. Элемент BASH_REMATCH с индексом n - это часть строки, соответствующая n-му подвыражению, заключенному в круглые скобки. Bash устанавливает значение BASH_REMATCH в глобальной области видимости; объявление его как локальной переменной приведет к неожиданным результатам.
Выражения могут быть объединены с помощью следующих операторов, перечисленных в порядке убывания приоритета:
( expression )
Возвращает значение expression. Это может использоваться для переопределения обычного приоритета операторов.
! expression
Истинно если expression ложно.
Истинно, если оба expression1 и expression2 истинно.
Истинно, если или expression1 или expression2 истинно.

Операторы && и || не вычисляют значение expression2, если значение expression1 достаточно для определения возвращаемого значения всего условного выражения.

Сначала расширяется список слов, следующих за in, генерируя список элементов. Затем переменная name присваивается каждому элементу этого списка по очереди, и list выполняется каждый раз. Если in word опущены, то команда for выполняет list один раз для каждого установленного позиционного параметра (смотрите раздел ПАРАМЕТРЫ ниже). Статус возврата - это статус завершения последней выполненной команды. Если при расширении списка элементов, следующих за in, список (list) пуст, то команды не выполняются, и статус возврата равен 0.
Сначала вычислить арифметическое выражение expr1 в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ. Затем повторно вычислить арифметическое выражение expr2, пока оно не станет равным нулю. Каждый раз, когда значение expr2 принимает ненулевое значение, выполнить list и вычислить арифметическое выражение expr3. Если какое-либо выражение опущено, то оно ведет себя так, как будто его значение равно 1. Возвращаемое значение - это статус завершения последней выполненной команды в списке list или ненулевое значение, если какое-либо из выражений является недопустимым.
Использовать встроенные команды break и continue (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже) для управления выполнением цикла.
Сначала раскрыть список слов, следующих за in, создав список элементов, и вывести набор развернутых слов в стандартную ошибку, при этом каждому из набора предшествует номер. Если in word пропущено, то вывести позиционные параметры (смотрите раздел ПАРАМЕТРЫ ниже). Затем select отобразит запрос PS3 и считает строку из стандартного ввода. Если строка содержит число, соответствующее одному из отображаемых слов, то select устанавливает значение name для этого слова. Если строка пуста, то select снова отображает слова и запрашивает запрос. Если EOF считан, то select завершает работу и возвращает значение 1. Для любого другого значения name устанавливается значение нольl. Прочитанная строка сохраняется в переменной REPLY. Команда list выполняется после каждого выбора, пока не будет выполнена команда break. Статус завершения команды select - это статус завершения последней команды, выполненной в list, или нулевой, если команды не были выполнены.
Команда case сначала разворачивает слово word и пытается сопоставить его с каждым шаблоном pattern по очереди, начиная с первого к последнему, используя правила сопоставления, описанные в подразделе Сопоставление с шаблоном ниже. Список шаблонов - это набор из одного или нескольких шаблонов, разделенных символами , а оператор ) завершает список шаблонов. Слово word расширяется с помощью тильды, параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Каждый шаблон pattern расширяется с помощью тильды, параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов. Предложение clause - это список шаблонов и связанный с ним список list.
Когда найдено совпадение, команда case выполняет соответствующую команду из списка list. Если оператор ;; завершает предложение case, то команда case завершается после первого совпадения. Использование ;& вместо ;; приводит к продолжению выполнения list, связанного списком шаблонов. Использование ;;& вместо ;; приводит к тому, что оболочка проверяет следующий список шаблонов, если таковой имеется, и выполняет любой связанный с list, если совпадение завершается успешно, продолжая выполнение команды case, как если бы список шаблонов не совпадал. Статус выхода равен нулю, если ни один шаблон не совпадает.
В противном случае это статус завершения последней команды, выполненной в последнем списке list.
Выполняется if list. Если ее статус завершения равен нулю, то выполняется then list. В противном случае каждый elif list выполняется по очереди, и если его статус завершения равен нулю, то выполняется then list и команда завершается. В противном случае выполняется else list, если это присутствует. Статус завершения - это статус завершения последней выполненной команды или ноль, если ни одно из условий не является истинным.
Команда while непрерывно выполняет список list-2 до тех пор, пока последняя команда в списке list-1 не вернет нулевой статус завершения. Команда until идентична команде while, за исключением того, что проверка отменяется: list-2 выполняется до тех пор, пока последняя команда в list-1 не вернет ненулевой статус завершения. Статус завершения команд while и until - это статус завершения последней команды, выполненной в list-2, или ноль, если ни одна из них не была выполнена.

Coprocesses

Сопроцесс coprocess - это команда оболочки, перед которой стоит зарезервированное слово coproc. Сопроцесс выполняется асинхронно в подоболочке, как если бы команда была завершена с помощью управляющего оператора &, при этом между исполняющей оболочкой и сопроцессом устанавливается двусторонняя связь.

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

coproc [NAME] command [redirections]

При этом создается сопроцесс с названием NAME. Команда command может быть как простой, так и составной командой (смотрите выше). NAME - это наименование переменной оболочки. Если NAME не указано, то по умолчанию используется наименование COPROC.

Рекомендуемая форма для использования в сопроцессе - это

coproc NAME { command [redirections]; }

Эта форма предпочтительнее, поскольку простые команды приводят к тому, что сопроцесс всегда называется COPROC, и она проще в использовании и более полная, чем другие составные команды.

Если command является составной командой, то NAME является необязательным. Слово, следующее за coproc, определяет, интерпретируется ли это слово как название переменной: оно интерпретируется как NAME, если это не зарезервированное слово, которое вводит составную команду. Если command является простой командой, то NAME не допускается; это делается для того, чтобы избежать путаницы между NAME и первым словом простой команды.

Когда выполняется сопроцесс, оболочка создает переменную массива (смотрите подраздел Массивы ниже) с названием NAME в контексте исполняющей оболочкой. Стандартный вывод command подключается по конвейеру к файловому дескриптору в исполняющей оболочке, и этому файловому дескриптору присваивается значение NAME[0]. Стандартный ввод command подключается по конвейеру к файловому дескриптору в исполняющей оболочке, и этот файловый дескриптор присваивается NAME[1]. Этот конвейер устанавливается перед любыми перенаправлениями, указанными командой (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ ниже). Файловые дескрипторы могут использоваться в качестве аргументов для команд оболочки и перенаправлений с использованием стандартных расширений слов. Файловые дескрипторы, кроме тех, которые созданы для выполнения команд и обработки подстановок, недоступны в подоболочках.

Идентификатор процесса оболочки ID, созданный для выполнения сопроцесса, доступен в виде значения переменной NAME_PID. Встроенная команда wait может использоваться для ожидания завершения сопроцесса.

Поскольку сопроцесс создается как асинхронная команда, то команда coproc всегда возвращает результат успешно. Возвращаемый статус сопроцесса - это статус завершения command.

Определения функций оболочки

Функция оболочки - это объект, который вызывается как простая команда и выполняет сложную команду с новым набором позиционных параметров. Функции оболочки объявляются следующим образом:

Это определяет функцию с названием fname. Зарезервированное слово function необязательно. Если указано зарезервированное слово function, то скобки необязательны. Тело функции body - это составная команда compound-command (смотрите подраздел Составные команды выше). Эта команда обычно представляет собой список команд list между { и }, но может быть любой командой, указанной в подразделе Составные команды выше. Если используется зарезервированное слово function, но скобки не указаны, то рекомендуется использовать фигурные скобки. Составная команда compound-command выполняется всякий раз, когда fname указано в качестве названия простой команды. В режиме posix name должно быть допустимым названием для оболочки и не может быть названием одного из POSIX special builtins. В режиме по умолчанию названием функции может быть любое слово без кавычек, которое не содержит $.

Любые перенаправления (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ ниже), указанные при определении функции, выполняются при ее выполнении.

Статус завершения определения функции равен нулю, если только не возникает синтаксическая ошибка или функция с таким же названием, доступная только для чтения, уже не существует. При выполнении статус завершения функции равен статусу завершения последней команды, выполненной в её еле (смотрите раздел ФУНКЦИИ ниже).

КОММЕНТАРИИ

В неинтерактивной оболочке или в интерактивной оболочке, в которой включена опция interactive_comments для встроенной команды shopt (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), слово, начинающееся с #, содержит комментарий. Слово начинается в начале строки, после пробела без кавычек или после оператора. Комментарий приводит к тому, что это слово и все остальные символы в этой строке игнорируются. Интерактивная оболочка без включенной опции interactive_comments не допускает комментариев. Опция interactive_comments включена по умолчанию в интерактивных оболочках.

КАВЫЧКИ

Кавычки Quoting используется для удаления специального значения определенных символов или слов из командной строки. Кавычки могут использоваться для отключения специальной обработки специальных символов, для предотвращения распознавания зарезервированных слов как таковых и для предотвращения расширения параметров.

Каждый из метасимволов metacharacters, перечисленных выше в разделе ОПРЕДЕЛЕНИЯ, имеет особое значение для оболочки и должен быть заключен в кавычки, если он должен только представлять сам себя.

Когда используются средства расширения истории команд (смотрите раздел РАСШИРЕНИЕ ИСТОРИИ ниже), тогда символ, (обычно !) для предотвращения расширения истории history expansion, должен быть заключен в кавычки.

Существует четыре механизма кавычек: символы escape escape character, одинарные кавычки, двойные кавычки и одинарные кавычки в знаках доллара.

Обратная косая черта без кавычек (\) - это escape character - экранирующий символ. Он сохраняет буквальное значение следующего за ним символа, удаляя любое его специальное значение, за исключением <newline>. Если появляется пара \<newline>, а обратная косая черта сама по себе не заключена в кавычки, то \<newline> рассматривается как продолжение строки (то есть удаляется из входного потока и фактически игнорируется).

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

При заключении символов в двойные кавычки сохраняется буквальное значение всех символов в кавычках, за исключением $, `, \ и, если включено расширение истории, !. Когда оболочка находится в режиме posix, символ ! не имеет особого значения в двойных кавычках, даже если включено расширение истории. Символы $ и ` сохраняют свое особое значение в двойных кавычках. Обратная косая черта сохраняет свое особое значение только в том случае, если за ней следует один из следующих символов: $, `, ", \ или <newline>. Обратные косые черты, предшествующие символам без специального значения, остаются без изменений.

Двойная кавычка может быть заключена в двойные кавычки, если перед ней поставить обратную косую черту. Если эта опция включена, то будет выполнено расширение истории, если только !, заключенный в двойные кавычки, не будет экранирован с помощью обратной косой черты. Обратная косая черта, предшествующая !, не удаляется.

Специальные параметры * и @ имеют специальное значение, когда они заключены в двойные кавычки (смотрите раздел ПАРАМЕТРЫ ниже).

Последовательности символов вида $'string' рассматриваются как особый вариант одинарных кавычек. Последовательность расширяется до string, при этом символы, экранированные обратной косой чертой, в string заменяются в соответствии со стандартом ANSI C. Управляющие последовательности с обратной косой чертой, если они присутствуют, декодируются следующим образом:

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

Расширенный результат заключен в одинарные кавычки, как если бы знак доллара отсутствовал.

Перевод строк

Строка, заключенная в двойные кавычки, перед которой стоит знак доллара ($"string"), переводится в соответствии с текущей локалью. Инфраструктура gettext выполняет поиск и преобразование, используя переменные оболочки LC_MESSAGES, TEXTDOMAINDIR и TEXTDOMAIN. Если текущей локалью является C или POSIX, и если перевод недоступен или если строка не переведена, то знак доллара игнорируется, а строка обрабатывается как заключенная в двойные кавычки, как описано выше. Это форма двойных кавычек, поэтому строка по умолчанию остается заключенной в двойные кавычки независимо от того, переведена она и заменена или нет. Если опция noexpand_translation включена с помощью встроенной функции shopt, то переведенные строки заключаются в одинарные, а не в двойные кавычки. Смотрите описание команды shopt ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ.

ПАРАМЕТРЫ

Параметр parameter - это объект, в котором хранятся значения. Это может быть название name, число или один из специальных символов, перечисленных ниже в подразделе Специальные параметры. Переменная variable - это параметр, обозначающий name. Переменная имеет значение value и ноль или более атрибутов attributes. Атрибуты присваиваются с помощью встроенной команды declare (смотрите описание команды declare ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ). Встроенные команды export и readonly назначают специальные атрибуты.

Параметр считается установленным, если ему было присвоено значение. Строка ноль является допустимым значением. После того, как переменная установлена, ее можно отменить только с помощью встроенной команды unset (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

Значение variable присваивается с помощью инструкции вида

name=[value]

Если value не задано, то переменной присваивается нулевая строка. Все value расширяются тильдой, параметрами и переменными, заменой команд, арифметическим расширением и удалением кавычек (смотрите раздел РАСШИРЕНИЕ ниже). Если для переменной задан атрибут целое число integer, то value вычисляется как арифметическое выражение, даже если расширение $((...)) не используется (смотрите подраздел Арифметическое расширение ниже). Разделение слов и расширение названия пути не выполняются. Операторы присваивания могут также использоваться в качестве аргументов для встроенных команд alias, declare, typeset, export, readonly и local (команды declaration). В режиме posix эти встроенные элементы могут появляться в команде после одного или нескольких экземпляров встроенного элемента command и сохранять свойства выражения присваивания.

В контексте, когда оператор присваивания присваивает значение переменной оболочки или индексу массива, оператор присваивания присваивает значение переменной оболочки или индексу массива “+=” оператор добавляет к предыдущему значению переменной. Это включает аргументы для команд declaration, таких как declare, которые принимают выражение присваивания. Когда “+=” применяется к переменной, для которой задан атрибут integer, текущее значение переменной и значение valueвычисляются как арифметические выражения, а сумма результатов присваивается в качестве значения переменной. Текущее значение обычно является целочисленной константой, но может быть и выражением. Когда “+=” применяется к переменной массива с помощью составного присваивания (смотрите подраздел Массивы ниже), значение переменной не является неустановленным (как это происходит при использовании “=”), и новые значения добавляются к массиву, начиная с значения, на единицу превышающего максимальный индекс массива (для индексированных массивов), или добавляются в качестве дополнительных пар ключ-значение в ассоциативном массиве. При применении к переменной, имеющей строковое значение, value расширяется и добавляется к значению переменной.

Переменной можно присвоить атрибут nameref, используя опцию -n для встроенных команд declare или local (смотрите описания declare и local ниже), чтобы создать nameref или ссылку на еще одну переменную. Это позволяет косвенно манипулировать переменными. Всякий раз, когда ссылаются на переменную nameref, то ей присваивают значение, сбрасывают значение или изменяют ее атрибуты (кроме использования или изменения самого атрибута nameref), операция фактически выполняется над переменной, указанной значением переменной nameref. Переменная nameref обычно используется в функциях оболочки для ссылки на переменную, название которой передается в качестве аргумента функции. Например, если название переменной передается в функцию оболочки в качестве первого аргумента, то командой

declare -n ref=$1

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

Когда оболочка запускается, она считывает свою окружающую среду и создает переменную оболочки из каждой переменной окружающей среды, которая имеет допустимое название, как описано ниже (смотрите раздел ОКРУЖАЮЩАЯ СРЕДА).

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

Позиционный параметр positional parameter - это параметр, обозначаемый одной или несколькими цифрами, отличными от цифры 0. Позиционные параметры назначаются из аргументов командной строки при ее вызове и могут быть переназначены с помощью встроенной команды set. Позиционные параметры не могут быть назначены с помощью команды присваивания. Позиционные параметры временно заменяются при выполнении функции оболочки (смотрите раздел ФУНКЦИИ ниже).

Если позиционный параметр, состоящий более чем из одной цифры, раскрывается, то он должен быть заключен в фигурные скобки (смотрите раздел РАСШИРЕНИЕ ниже). Без фигурных скобок цифра, следующая за $, может относиться только к одному из первых девяти позиционных параметров ($1-$9) или к специальному параметру $0 (смотрите следующий раздел).

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

Оболочка обрабатывает несколько параметров особым образом. На эти параметры можно только ссылаться; присвоение им значений запрещено. Специальные параметры обозначаются одним из следующих символов.

*
($*) Расширяется до позиционных параметров, начиная с единицы. Если расширение не заключено в двойные кавычки, каждый позиционный параметр расширяется до отдельного слова. В контекстах, где выполняется расширение слов, эти слова подлежат дальнейшему разбиению на слова и расширению названия пути. Когда расширение происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенного первым символом переменной IFS. То есть, "$*" эквивалентно "$1c$2c...", где c - это первый символ значения переменной IFS. Если значение IFS не задано, то параметры разделяются пробелами. Если значение IFS равно ноль, то параметры объединяются без промежуточных разделителей.
@
($@) Расширяется до позиционных параметров, начиная с единицы. В контекстах, где выполняется разбиение слов, это расширяет каждый позиционный параметр до отдельного слова; если они не заключены в двойные кавычки, эти слова подлежат разбиению на слова. В контекстах, где разделение слов не выполняется, например, в части значений оператора присваивания, оно расширяется до одного слова, при этом каждый позиционный параметр разделяется пробелом. Когда расширение происходит в двойных кавычках и выполняется разделение слов, каждый параметр расширяется до отдельного слова. Таким образом, "$@" эквивалентно "$1" "$2" ... Если в слове используется расширение в двойных кавычках в пределах слова расширение первого параметра соединяется с расширением начальной части исходного слова, а расширение последнего параметра соединяется с расширением последней части исходного слова. Когда позиционных параметров нет, "$@" и $@ расширяются до нуля (т.е. удаляются).
#
($#) Расширяется до количества позиционных параметров в десятичной системе счисления.
?
($?) Расширяется до статуса завершения последней выполненной команды.
-
($-) Расширяется до флагов текущей опции, указанных при вызове встроенной командой set или установленных самой оболочкой (например, опцией -i).
$
($$) Расширяется до идентификатора процесса ID оболочки. В подоболочке он расширяется до идентификатора процесса родительской оболочки, а не подоболочки.
!
($!) Расширяется до идентификатора процесса задания, которое последним было переведено в фоновый режим, независимо от того, выполняется ли оно как асинхронная команда или с использованием встроенной команды bg (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЕМ ниже).
0
($0) Расширяется до названия оболочки или сценария оболочки. Это значение задается при инициализации оболочки. Если bash вызывается файлом команд, то $0 присваивается название этого файла. Если bash запускается с опцией -c, то $0 присваивается значение первого аргумента после строки, которая должна быть выполнена, если таковая присутствует. В противном случае ей присваивается значение названия файла, используемого для вызова bash, как указано в нулевом аргументе.

Переменные оболочки

Оболочка устанавливает следующие переменные:

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

Старший номер версии (the release).
Младший номер версии (the version).
Уровень исправления.
Версия сборки.
Статус выпуска (например, beta).
Значение MACHTYPE.
Расширяется до строки, описывающей версию этого экземпляра bash (например, реализация 5.2.37(3)).
Индекс слова в ${COMP_WORDS}, содержащего текущее положение курсора. Эта переменная доступна только в функциях оболочки, вызываемых средствами завершения программы (смотрите подраздел Завершение программы ниже).
Клавиша (или последняя клавиша в последовательности клавиш), используемая для вызова текущей функции завершения. Эта переменная доступна только в функциях командной строки и внешних командах, вызываемых средствами программируемого завершения (смотрите подраздел Программируемое завершение ниже).
Текущая командная строка. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами завершения программы (смотрите подраздел Завершение программы ниже).
Индекс текущей позиции курсора относительно начала текущей команды. Если текущая позиция курсора находится в конце текущей команды, то значение этой переменной равно ${#COMP_LINE}. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами завершения программ (смотрите подраздел Завершение программы ниже).
Присваивается целочисленное значение, соответствующее типу попытки завершения, вызвавшей вызов функции завершения: TAB, для обычного завершения - ?, для перечисления завершений после последовательных табуляций - !, для перечисления альтернатив при частичном завершении слова - @, вывод списка дополнений, если слово не изменено, или % для завершения меню. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами программируемого завершения (смотрите Программируемое завершение ниже).
Набор символов, которые библиотека readline обрабатывает как разделители слов при выполнении завершения слова. Если значение COMP_WORDBREAKS не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
Переменная типа массива (смотрите Массивы ниже), состоящая из отдельных слов в текущей командной строке. Строка разбивается на слова так, как ее разбила бы readline, используя COMP_WORDBREAKS, как описано выше. Эта переменная доступна только в функциях оболочки, вызываемых средствами программируемого завершения (см. подраздел Завершение программ ниже).
Переменная массива (смотрите подраздел Массивы ниже), созданная для хранения дескрипторов файлов для вывода и ввода в не именованный сопроцесс (смотрите подраздел Сопроцессы выше).
Переменная массива (смотрите подраздел Массивы ниже), содержащая текущее содержимое стека каталогов. Каталоги отображаются в стеке в том порядке, в котором они отображаются встроенной командой dirs. Присвоение элементам этого массива переменной может использоваться для изменения каталогов, уже находящихся в стеке, но для добавления и удаления каталогов необходимо использовать встроенные команды pushd и popd. Присвоение этой переменной не изменяет текущий каталог. Если DIRSTACK не установлено, то это теряет свои специальные свойства, даже если впоследствии будет сброшено.
При каждом обращении к этому параметру он увеличивается до количества секунд, прошедших с начала эпохи Unix (смотрите time(3)), в виде значения с плавающей запятой с микросекундной детализацией. Присвоения EPOCHREALTIME игнорируются. Если EPOCHREALTIME не установлено, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено.
Каждый раз, когда этот параметр ссылается, он расширяется до количества секунд с момента начала эпохи Unix (смотрите time(3)). Установка EPOCHSECONDS игнорируется. Если EPOCHSECONDS не задан, то он теряет свои специальные свойства, даже если впоследствии будет сброшен.
Расширяется до эффективного пользовательского идентификатора для текущего пользователя, инициализированного при запуске оболочки. Эта переменная доступна только для чтения.
Переменная массива, содержащая названия всех функций оболочки, в настоящее время в стеке вызовов выполнения.Элемент с индексом 0-это название любой в настоящее время выполняющейся функцию оболочки.Самый нижний элемент (тот, который с самым большим индексом) “main”. Эта переменная существует только при выполнении функции оболочки. Установка FUNCNAME не действует.Если FUNCNAME не установлена, то она теряет свои специальные свойства, даже если впоследствии будет сброшена.
Эта переменная может использоваться с BASH_LINENO и BASH_SOURCE. Каждому элементу FUNCNAME соответствуют элементы в BASH_LINENO и BASH_SOURCE для описания стека вызовов. Например, ${FUNCNAME[$i]} была вызвана из файла ${BASH_SOURCE[$i+1]} с номером строки ${BASH_LINENO[$i]}. Встроенная команда caller отображает текущий стек вызовов, используя эту информацию.
Переменная массива, содержащая список групп, членом которых является текущий пользователь. Присвоения GROUPS не имеют значения. Если значение GROUPS не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
Номер истории или индекс в списке истории текущей команды. Присвоения HISTCMD не имеют никакого эффекта. Если значение HISTCMD не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено.
Автоматически устанавливается на название текущего хоста.
Автоматически устанавливает строку, однозначно описывающую тип завершения, на котором выполняется bash. Значение по умолчанию зависит от системы.
При каждом обращении к этому параметру оболочка подставляет десятичное число, представляющее текущий порядковый номер строки (начинающийся с 1) в скрипте или функции. Если его нет в скрипте или функции, то не гарантируется, что подставленное значение будет значимым. Если параметр LINENO не установлен, то он теряет свои специальные свойства, даже если впоследствии будет сброшен.
Автоматически устанавливает строку, полностью описывающую тип системы, на которой выполняется bash, в стандартном формате GNU cpu-company-system. Значение по умолчанию зависит от системы.
Переменная массива (смотрите подраздел Массивы ниже), созданная для хранения текста, считываемого из встроенного файла mapfile, когда название переменной не указано.
Предыдущий рабочий каталог, заданный командой cd.
Значение последнего аргумента опции, обработанного встроенной командой getopts (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Индекс следующего аргумента, который будет обработан встроенной командой getopts (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Автоматически устанавливает строку, описывающую операционную систему, в которой выполняется bash. Значение по умолчанию зависит от системы.
Переменная массива (смотрите подраздел Массивы ниже), содержащая список значений статуса завершения команд в конвейере переднего плана, который может состоять только из простой команды (смотрите раздел ГРАММАТИКА ОБОЛОЧКИ выше). Bash устанавливает PIPESTATUS после выполнения многоэлементных конвейеров, конвейеров с синхронизацией и отменой, простых команд, вложенных оболочек, созданных с помощью оператора, составных команд [[ и ((, а также после возникновения ошибок, которые приводят к появлению прерываний оболочки при выполнения команды.
Идентификатор процесса родительской оболочки. Эта переменная доступна только для чтения.
Текущий рабочий каталог, заданный командой cd.
При каждом обращении к этому параметру он расширяется до случайного целого числа в диапазоне от 0 до 32767. Присвоение значения RANDOM инициализирует (определяет) последовательность случайных чисел. При вводе в генератор случайных чисел того же постоянного значения получается та же последовательность значений. Если значение RANDOM не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено.
Любой числовой аргумент, переданный команде readline, которая была определена с помощью “bind -x” (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), когда он был вызван.
Содержимое буфера строк readline, предназначенного для использования с “bind -x” (смотрите ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Положение метки (сохраненной точки вставки) в буфере строк readline для использования с “bind -x” (смотрите ниже раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ). Символы между точкой вставки и меткой часто называются region.
Положение точки вставки в буфере строк readline для использования с “bind -x” (смотрите ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Устанавливается в строку ввода, считываемую встроенной командой read, когда аргументы не указаны.
При каждом обращении к этому параметру он увеличивается до количества секунд с момента вызова оболочки. Если значение переменной SECONDS задано, то при последующих обращениях к ней возвращается значение, равное количеству секунд с момента присвоения плюс присвоенное значение. Количество секунд при вызове оболочки и текущее время всегда определяются путем запроса системных часов с разрешением в одну секунду. Если значение SECONDS не задано, оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
Список включенных опций оболочки, разделенных двоеточием. Каждое слово в списке является допустимым аргументом для опции -o для встроенной команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Опции, отображаемые в SHELLOPTS, указаны как on в set -o. Если эта переменная присутствует в окружающей среде при запуске bash, то оболочка включает каждую опцию в списке перед чтением любых файлов запуска. Если эта переменная экспортирована, то дочерние оболочки будут включать каждую опцию в списке. Эта переменная доступна только для чтения.
Увеличивается на единицу при каждом запуске экземпляра bash.
При каждом обращении к этой переменной она преобразуется в 32-разрядное псевдослучайное число. Генератор случайных чисел не является линейным в системах, поддерживающих /dev/urandom или arc4random(3), поэтому каждое возвращаемое число не имеет отношения к числам, предшествующим ему. Когда генератор случайных чисел не может быть запущен, тогда присвоения этой переменной значений не имеют эффекта. Если SRANDOM сброшено, оно теряет свои специальные свойства, даже если впоследствии будет сброшено.
Расширяется до идентификатора текущего пользователя, инициализируемого при запуске командной строки. Эта переменная доступна только для чтения.

Оболочка использует следующие переменные. В некоторых случаях bash присваивает переменной значение по умолчанию; эти случаи описаны ниже.

Это значение используется для настройки уровня совместимости оболочки. Описание различных уровней совместимости и их последствий смотрите в разделе РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ ниже. Значением может быть десятичное число (например, 4,2) или целое число (например, 42), соответствующее желаемому уровню совместимости. Если значение для BASH_COMPAT не задано или имеет значение пустой строки, то уровень совместимости устанавливается по умолчанию для текущей версии. Если для BASH_COMPAT задано значение, которое не соответствует ни одному из допустимых уровней совместимости, то оболочка выводит сообщение об ошибке и устанавливает уровень совместимости по умолчанию для текущей версии. Подмножество допустимых значений соответствует уровням совместимости, описанным ниже в разделе РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ. Например, 4.2 и 42 являются допустимыми значениями, которые соответствуют опции compat42 команды shopt и устанавливают уровень совместимости равным 42. Текущая версия также является допустимым значением.
Если этот параметр задан, когда bash выполняет сценарий оболочки, то его расширенное значение интерпретируется как название файла, содержащее команды для инициализации оболочки перед чтением и выполнением команд из сценария. Значение BASH_ENV подвергается расширению параметров, замене командами и арифметическому расширению, прежде чем оно будет интерпретировано как название файла. PATH не используется для поиска результирующего названия файла.
Если задано целое число, соответствующее допустимому файловому дескриптору, то bash записывает выходные данные трассировки, сгенерированные при “set -x” включении для этого файлового дескриптора, вместо стандартной ошибки. Файловый дескриптор закрывается, если BASH_XTRACEFD сброшено или ему присвоено новое значение. Сброс значения BASH_XTRACEFD или присвоение ему пустой строки приводит к отправке выходных данных трассировки со стандартной ошибкой. Обратите внимание, что установка значения BASH_XTRACEFD равным 2 (файловый дескриптор стандартной ошибки), а затем сброс этого значения приведет к закрытию стандартной ошибки.
Путь поиска для команды cd. Это разделенный двоеточием список каталогов, в котором оболочка выполняет поиск каталогов, указанных в качестве аргументов команды cd. Примерным значением является “.:~:/usr”.
Задайте количество завершенных дочерних значений статуса, которые должна запомнить оболочка. Bash не позволит уменьшить это значение ниже POSIX - требуемый минимум, и существует максимальное значение (в настоящее время 8192), которое не может быть превышено. Минимальное значение зависит от системы.
Используется командой select для определения ширины терминала при печати списков. Устанавливается автоматически, если включена опция checkwinsize или в интерактивной командной строке при получении команды SIGWINCH.
Переменная массива, из которой bash считывает возможные завершения, сгенерированные функцией оболочки, вызываемой программируемым средством завершения (смотрите подраздел Программируемое завершение ниже). Каждый элемент массива содержит одно возможное завершение.
Если bash найдет эту переменную в окружающей среде, когда оболочка запускается со значением “t”, предполагающем, что оболочка запущена в буфере оболочки Emacs, и отключено редактирование строк.
Расширяется и выполняется аналогично BASH_ENV (смотрите раздел ВЫЗОВ выше) при вызове интерактивной оболочки в режиме posix.
Список шаблонов оболочки, разделенных двоеточием (смотрите подраздел Сопоставление с шаблоном), определяющий набор названий файлов, которые будут игнорироваться при поиске команд с использованием PATH. Файлы, полные пути к которым соответствуют одному из этих шаблонов, не считаются исполняемыми файлами для целей завершения и выполнения команд с помощью поиска PATH. Это не влияет на поведение команд [, test и [[. Полные пути в хэш-таблице команд не зависят от EXECIGNORE. Используйте эту переменную, чтобы игнорировать файлы общей библиотеки, которые имеют установленный бит исполняемого файла, но не являются исполняемыми файлами. При сопоставлении с шаблоном учитывается настройка опции оболочки extglob.
Редактор по умолчанию для встроенной команды fc.
Разделенный двоеточием список суффиксов, которые следует игнорировать при заполнении названия файла (смотрите БИБЛИОТЕКА READLINE ниже). Название файла, суффикс которого совпадает с одной из записей в FIGNORE, исключается из списка совпадающих названий файлов. Примерным значением является “.o:~” (При присвоении значения этой переменной, содержащего тильду, необходимо заключать значение в кавычки).
Если задано числовое значение, большее 0, то это определяет максимальный уровень вложенности функции. Вызовы функций, превышающие этот уровень вложенности, приводят к прерыванию текущей команды.
Список шаблонов, разделенных двоеточием, определяющий набор названий файлов, которые будут игнорироваться при расширении названия пути. Если название файла, соответствующее шаблону расширения названия пути, также соответствует одному из шаблонов в GLOBIGNORE, то оно удаляется из списка совпадений. Сопоставление с наблоном выполняется с учетом настройки опции оболочки extglob.
Управляет тем, как сортируются результаты расширения названия пути. Значение этой переменной определяет критерии сортировки и порядок сортировки результатов расширения названия пути. Если эта переменная не задана или имеет значение нулевой строки, то при расширении названия пути используется историческое поведение сортировки по названию в лексикографическом порядке возрастания, как определено переменной оболочки LC_COLLATE.
Если задано, допустимое значение начинается с необязательного +, которое игнорируется, или -, которое меняет порядок сортировки с восходящего на нисходящий, за которым следует спецификатор сортировки. Допустимыми спецификаторами сортировки являются name, numeric, size, mtime, atime, ctime и blocks, которые сортируют файлы по названию, названию в числовом, а не лексикографическом порядке, т.е. размеру файла, времяни модификации, времяни доступа, времяни изменения индекса и количеству блоков, соответственно. Если какой-либо из ключей, отличных от названия, сравнивается как равный (например, если два файла имеют одинаковый размер), то при сортировке название используется в качестве вторичного ключа сортировки.
Например, значение -mtime сортирует результаты в порядке убывания по времени изменения (сначала самое новое).
Спецификатор numeric рассматривает названия, состоящие исключительно из цифр, т.е. как числа и сортирует их по их числовому значению (таким образом “2” сортирует до “10”, например). При использовании numeric названия, не содержащие цифр, сортируются после всех названий, состоящих из цифр, и сортируются по названию традиционным способом.
Спецификатор сортировки nosort полностью отключает сортировку; bash возвращает результаты в том порядке, в котором они считываются из файловой системы, игнорируя любые начальные значения -.
Если спецификатор сортировки отсутствует, то по умолчанию используется значение name, поэтому значение + эквивалентно нулевой строке, а значение - выполняет сортировку по названию в порядке убывания. Любое недопустимое значение восстанавливает историческое поведение сортировки.
Разделенный двоеточием список значений, определяющий порядок сохранения команд в списке истории. Если список значений содержит ignorespace, то строки, начинающиеся с символа space, не сохраняются в списке истории. Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи в истории, не сохраняются. Значение ignoreboth является сокращением для ignorespace и ignoredups. Значение erasedups приводит к удалению всех предыдущих строк, соответствующих текущей строке, из списка истории, прежде чем эта строка будет сохранена. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если значение HISTCONTROL не задано или не содержит допустимого значения, то bash сохраняет все строки, прочитанные синтаксическим анализатором оболочки, в списке истории, в зависимости от значения HISTIGNORE. Если первая строка многострочной составной команды была сохранена, то вторая и последующие строки не проверяются и добавляются в историю независимо от значения HISTCONTROL. Если первая строка не была сохранена, то вторая и последующие строки команды также не будут сохранены.
Название файла, в котором сохраняется история команд (смотрите раздел ИСТОРИЯ ниже). Bash присваивает значение по умолчанию, равное ~/.bash_history. Если значение HISTFILE не задано или равно нулю, то оболочка не сохраняет историю команд при завершении работы.
Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, файл истории при необходимости сокращается, чтобы содержать не более количества записей истории, общее количество которых не превышает этого количества строк, путем удаления самых старых записей. Если список истории содержит многострочные записи, файл истории может содержать больше строк, чем это максимальное значение, чтобы избежать частичных записей истории. Файл истории также сокращается до этого размера после его записи при выходе из оболочки или с помощью встроенной команды history. Если значение равно 0, то файл истории сокращается до нулевого размера. Нечисловые значения и числовые значения, меньшие нуля, запрещают усечение. Оболочка устанавливает значение по умолчанию в HISTSIZE после чтения любых файлов запуска.
Разделенный двоеточием список шаблонов, используемых для определения того, какие командные строки следует сохранить в списке истории. Если командная строка соответствует одному из шаблонов в значении HISTIGNORE, то она не сохраняется в списке истории. Каждый шаблон привязывается к началу строки и должен соответствовать всей строке (bash неявно добавляет “*”). Каждый шаблон проверяется на соответствие строке после применения проверок, указанных в HISTCONTROL. В дополнение к обычным символам, соответствующим шаблону оболочки, “&” совпадающим с предыдущей строкой журнала. Обратная косая черта закрывает строку “&”; обратная косая черта удаляется перед попыткой сопоставления. Если первая строка многострочной составной команды была сохранена, вторая и последующие строки не проверяются и добавляются в журнал независимо от значения HISTIGNORE. Если первая строка не была сохранена, то вторая и последующие строки команды также не будут сохранены. Сопоставление с шаблоном выполняется с учетом настройки опции оболочки extglob.
HISTIGNORE выполняет часть функций HISTCONTROL. Шаблон из “&” идентичен “ignoredups”, и шаблон “[ ]*” идентичен “ignorespace”. Объединение этих двух шаблонов, разделенных двоеточием, обеспечивает функциональность “ignoreboth”.
Количество команд, которые необходимо запомнить в истории команд (смотрите раздел ИСТОРИЯ. Если значение равно 0, то команды не сохраняются в списке истории. Числовые значения, меньшие нуля, приводят к тому, что каждая команда сохраняется в списке истории (ограничений нет). После прочтения любых файлов запуска оболочка устанавливает значение по умолчанию равным 500.
Если эта переменная установлена, а не равна нулю, то ее значение используется в качестве строки формата strftime(3) для печати отметки времени, связанной с каждой записью истории, отображаемой встроенной командой history. Если эта переменная установлена, то оболочка записывает временные метки в файл истории, чтобы их можно было сохранять во время сеансов оболочки. При этом используется символ комментария к истории, чтобы отличать временные метки от других строк истории.
Домашний каталог текущего пользователя; аргумент по умолчанию для встроенной команды cd. Значение этой переменной также используется при расширении тильды.
Содержит название файла в том же формате, /etc/hosts который может прочитать оболочка, когда ей потребуется ввести название хоста. Список возможных дополнений названия хоста может быть изменен во время работы оболочки; при следующей попытке завершения названия хоста после изменения значения bash добавляет содержимое нового файла в существующий список. Если переменная HOSTFILE задана, но не имеет значения или не содержит названия файла, доступного для чтения, то оболочка bash попытается прочитать /etc/hosts чтобы получить список возможных дополнений к названию хоста. Если значение HOSTFILE не задано, то bash очищает список названий хостов.
Внутренний разделитель полей Internal Field Separator, который используется для разделения слов после расширения и для разделения строк на слова с помощью встроенной команды read. Разделение слов описано ниже в разделе РАСШИРЕНИЕ. Значение по умолчанию равно “<space><tab><newline>”.
Управляет действием интерактивной оболочки при получении символа EOF в качестве единственного входного сигнала. Если задано, то это значение равно количеству последовательных символов EOF, которые должны быть введены в качестве первых символов в строке ввода перед завершением работы bash. Если переменная задана, но не имеет числового значения или значение равно нулю, то значение по умолчанию равно 10. Если значение не задано, то EOF означает окончание ввода в оболочку.
Название файла для файла запуска readline, которое переопределяет значение по умолчанию ~/.inputrc (смотрите раздел БИБЛИОТЕКА READLINE ниже).
Если эта переменная появляется в окружающей среде при запуске оболочки, то bash предполагает, что она выполняется внутри буфера оболочки Emacs и может отключить редактирование строк, в зависимости от значения TERM.
Используется для определения локали для любой категории, не выбранной специально, с помощью переменной, начинающейся с LC_.
Эта переменная переопределяет значение LANG и любой другой переменной LC_, определяющей локаль.
Эта переменная определяет порядок сопоставления, используемый при сортировке результатов расширения названия пути, и определяет диапазон выражений , классов эквивалентности и сопоставляющих последовательностей при расширении названия пути и сопоставлении с образцом.
Эта переменная определяет интерпретацию символов и поведение классов символов при расширении названия пути и сопоставлении с шаблоном.
Эта переменная определяет локаль, используемую для перевода строк, заключенных в двойные кавычки, перед которыми стоит символ $.
Эта переменная определяет категорию локали, используемой для форматирования чисел.
Эта переменная определяет категорию локали, используемой для форматирования данных и времени.
Используется командой select для определения длины столбца при печати списков выбора. Устанавливается автоматически, если включена опция checkwinsize, или в интерактивной оболочке при получении SIGWINCH.
Если в качестве значения задано название файла или каталога, а переменная MAILPATH не задана, то bash информирует пользователя о поступлении почты в указанный файл или каталог в формате Maildir.
Указывает, как часто (в секундах) bash проверяет почту. Значение по умолчанию равно 60 секундам. Когда приходит время проверять почту, оболочка выполняет это перед отображением основного запроса. Если эта переменная не задана или ей присвоено значение, которое не является числом, большим или равным нулю, то оболочка отключает проверку почты.
Разделенный двоеточием список названий файлов, которые необходимо проверить на наличие почты. Сообщение, которое будет распечатываться при поступлении почты в определенный файл, можно указать, отделив название файла от сообщения символом “?”. При использовании в тексте сообщения, $_ расширяется до названия текущего почтового файла. Например:

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

Оболочку Bash можно настроить так, чтобы для этой переменной указывалось значение по умолчанию (по умолчанию значения нет), но расположение используемых ею файлов пользовательской почты зависит от системы (например, /var/mail/$USER).

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

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

Массивы

Bash предоставляет одномерные индексированные и ассоциативные массивы переменных. В качестве индексированного массива может использоваться любая переменная; встроенная команда declare явно определяет массив. Нет ни максимального ограничения на размер массива, ни каких-либо требований к тому, чтобы элементы индексировались или назначались последовательно. Ссылки на индексированные массивы выполняются с использованием арифметических выражений, которые должны быть расширены до целого числа (смотрите ниже раздел АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ) и основаны на нуле; ссылки на ассоциативные массивы выполняются с использованием произвольных строк. Если не указано иное, то индексы индексированных массивов должны быть неотрицательными целыми числами.

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

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

Bash автоматически создает индексированный массив, если какой-либо переменной присваивается значение с использованием синтаксиса

name[subscript]=value .
Индекс subscript рассматривается как арифметическое выражение, значение которого должно быть больше или равно нулю. Чтобы явно определить (объявить) индексированный массив, следует использовать
declare -a name
(смотрите ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
declare -a name[subscript]
также принимается; subscript игнорируется.

Ассоциативные массивы создаются с помощью

declare -A name
.

Атрибуты могут быть заданы для переменной массива с помощью встроенных команд declare и readonly. Каждый атрибут применяется ко всем элементам массива.

Массивы присваиваются с помощью значений вида name=(value1 ... valuen), где каждое значение valueможет иметь вид [subscript]=string. Для присвоения индексированных массивов не требуется ничего, кроме строки string. Каждое значение value в списке расширяется с помощью расширений оболочки, описанных ниже в разделе РАСШИРЕНИЕ, но значения value, которые являются допустимыми значениями переменных, включая скобки и подстрочный индекс, не подвергаются расширению скобок и разделению слов, как для значений отдельных переменных.

При присвоении индексов индексированным массивам, если указаны необязательные скобки и нижний индекс, то присваивается этот индекс; в противном случае индекс присваиваемого элемента является последним индексом, плюс единица. Индексация начинается с нуля.

При присвоении значений ассоциативному массиву слова в составном присваивании могут быть либо выражениями присваивания, для которых требуется нижний индекс, либо списком слов, который интерпретируется как последовательность чередующихся ключей и значений: name=( key1 value1 key2 value2 ...). Они обрабатываются аналогично name=( [key1]=value1 [key2]=value2 ...). Первое слово в списке определяет, как будут интерпретироваться остальные слова; все значения в списке должны быть одного типа. При использовании пар ключ/значение ключи не должны отсутствовать или быть пустыми; последнее пропущенное значение обрабатывается как пустая строка.

Этот синтаксис также поддерживается встроенной командой declare. Отдельные элементы массива могут быть назначены с использованием синтаксиса name[subscript]=value, представленного выше.

При присвоении индексов индексированному массиву, если name содержит отрицательное число, то это число интерпретируется как относительное к единице, превышающей максимальный индекс name, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный -1, ссылается на последний элемент массива.

Этот “+=” оператор присваивается переменной массива при присваивании с использованием синтаксиса составного присваивания; смотрите раздел ПАРАМЕТРЫ выше.

Ссылка на элемент массива выполняется с помощью ${name[subscript]}. Фигурные скобки необходимы, чтобы избежать конфликтов при расширении названия пути. Если subscript равен @ или *, то слово расширяется до всех элементов name, если только это не указано в описании встроенного кода или расширения слова. Эти индексы различаются только в том случае, если слово заключено в двойные кавычки. Если слово заключено в двойные кавычки, то {name[*]} расширяется до одного слова со значением каждого элемента массива, разделенного первым символом специальной переменной IFS, а ${name[@]} расширяет каждый элемент name до отдельного слова. Когда элементов массива нет, ${name[@]} расширяется до нуля. Если расширение в двойных кавычках происходит внутри слова, то расширение первого параметра соединяется с начальной частью расширения исходного слова, а расширение последнего параметра соединяется с последней частью расширения исходного слова. Это аналогично расширению специальных параметров * и @ (смотрите подраздел Специальные параметры выше).

${#name[subscript]} расширяется до длины ${name[subscript]}. Если индекс subscript равен * или @, то расширение равно количеству элементов в массиве.

Если значение subscript, используемое для ссылки на элемент индексированного массива, равно числу, меньшему нуля, то оно интерпретируется относительное к единице, превышающей максимальный индекс массива, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный -1, ссылается на последний элемент.

Ссылка на переменную массива без нижнего индекса эквивалентна ссылке на массив с нижним индексом, равным 0. Любая ссылка на переменную с использованием допустимого нижнего индекса является допустимой; bash при необходимости создает массив.

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

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

Встроенная команда unset используется для уничтожения массивов. Команда unset name[subscript] удаляет элемент массива с индексом subscript как для индексированных, так и для ассоциативных массивов. Отрицательные индексы индексированных массивов интерпретируются так, как описано выше. Сброс последнего элемента переменной массива не приводит к сбросу значения переменной. Команда unset name, где name приводит к удалению всего массива. Команда unset name[subscript] ведет себя по-разному в зависимости от того, является ли name индексированным или ассоциативным массивом, когда subscript равен * или @. Если name является ассоциативным массивом, то элемент с индексом * или @ сбрасывается. Если name является индексированным массивом, то команда unset удаляет все элементы, но не удаляет сам массив.

При использовании названия переменной с индексом в качестве аргумента команды, например, с помощью команды unset, без использования синтаксиса расширения слов, описанного выше (например, unset a[4]), аргумент подлежит расширению названия пути. Заключите аргумент в кавычки, если расширение названия пути нежелательно (например, unset 'a[4]').

Встроенные команды declare, local и readonly поддерживают опцию -a для указания индексированного массива и опцию -A для указания ассоциативного массива. Если указаны обе опции, то приоритет имеет опция -A. Встроенная команда read поддерживает опцию -a, чтобы преобразовать список слов, считываемых из стандартного ввода, в массив. Встроенные команды set и declare отображают значения массива таким образом, чтобы их можно было повторно использовать в качестве значений. Другие встроенные команды также принимают аргументы типа "array name" (например, mapfile); подробности смотрите в описаниях отдельных встроенных команд ниже. Оболочка предоставляет ряд встроенных переменных массива.

РАСШИРЕНИЕ

Расширение выполняется в командной строке после того, как оно было разбито на слова. Эти расширения выполняет оболочка: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting, pathname expansion и quote removal.

Порядок раскрытия следующий: раскрытие фигурными скобками; раскрытие тильдой, раскрытие параметрами и переменными, арифметическое раскрытие и подстановка команд (выполняется слева направо); разделение слов; расширение названия пути; удаление кавычек.

В системах, которые могут это поддерживать, доступно дополнительное расширение: подстановка процессов process substitution. Это выполняется одновременно с расширением тильды, параметра, переменной, арифметическим расширением и подстановкой команд.

Удаление кавычек Quote removal всегда выполняется последним. При этом удаляются символы кавычек, присутствующие в исходном слове, а не те, которые являются результатом какого-либо другого расширения, если только они сами не были заключены в кавычки.

Только расширение скобками, разделение слов и расширение названия пути могут увеличить количество слов в расширении; другие расширения расширяют одно слово до одного слова. Единственными исключениями из этого правила являются расширения "$@" и "${name[@]}", а также, в большинстве случаев, $* и ${name[*]}, как описано выше (смотрите раздел ПАРАМЕТРЫ).

Расширение скобок

Расширение в скобках Brace expansion - это механизм генерации произвольных строк с общим префиксом и суффиксом, каждый из которых может быть пустым. Этот механизм аналогичен расширению названия пути pathname expansion, но генерируемые названия файлов необязательно должны существовать. Шаблоны, которые будут раскрываться фигурными скобками, формируются из необязательной преамбулы preamble, за которым следует либо последовательность строк, разделенная запятыми, либо выражение последовательности между парой фигурных скобок, за которым следует необязательный постскриптум postscript. К каждой строке, заключенной в фигурные скобки, добавляется преамбула, а затем к каждой результирующей строке добавляется постскриптум, расширяющийся слева направо.

Раскрытие в фигурных скобках может быть вложенным. Результаты каждой развернутой строки не сортируются; раскрытие в фигурных скобках сохраняет порядок слева направо. Например, a{d,c,b}e расширяется в “ade ace abe”.

Выражение последовательности принимает форму x..y[..incr], где x и y являются либо целыми числами, либо отдельными буквами, а incr, необязательное приращение, равное целому числу. Когда вводятся целые числа, то выражение расширяется до каждого числа от x до y, включительно. Если x или y начинаются с нуля, то каждый созданный член будет содержать одинаковое количество цифр, при необходимости заменяя их нулями. Когда вводятся буквы, то выражение расширяется до каждого символа лексикографически от x до y, включительно, используя локаль C. Обратите внимание, что и x, и y должны быть одного типа (целые или буквенные). При указании приращения оно используется как разница между каждым членом. Приращение по умолчанию равно 1 или -1, соответственно.

Раскрытие скобок выполняется перед любыми другими расширениями, и в результате сохраняются все символы, характерные для других расширений. Это строго текстовое дополнение. Оболочка Bash не применяет никакой синтаксической интерпретации к контексту расширения или к тексту между фигурными скобками.

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

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

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

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

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

Расширение тильды

Если слово начинается с символа тильды без кавычек ( “~”), все символы, предшествующие первой косой черте без кавычек (или все символы, если косая черта без кавычек отсутствует), считаются префиксом тильды tilde-prefix. Если ни один из символов в префиксе тильды не заключен в кавычки, то символы в префиксе тильды, следующие за тильдой, рассматриваются как возможные названия входа login name. Если это имя пользователя является пустой строкой, то тильда заменяется значением параметра оболочки HOME. Если значение HOME не задано, то тильда расширяется до домашнего каталога пользователя, выполняющего оболочку. В противном случае префикс тильды заменяется на домашний каталог, связанный с указанным названием входа.

Если префикс тильды является “~+”, значением переменной оболочки PWD, то он заменяет префикс тильды. Если префикс тильды является “~-”, оболочка заменяет значение переменной оболочки OLDPWD, если оно задано. Если символы, следующие за тильдой в префиксе тильды, состоят из числа N, необязательно с префиксом a “+” или “-”, префикс тильды заменяется соответствующим элементом из стека каталогов, поскольку он отображался бы при вызове встроенной команды dirs с символами, следующими за тильдой в префиксе тильды, в качестве аргумента. Если символы, следующие за тильдой в префиксе тильды, состоят из числа без начальной буквы “+” или “-”, расширение тильды предполагает “+”.

Результаты расширения тильдой обрабатываются так, как если бы они были заключены в кавычки, поэтому замена не требует разделения слов и расширения пути к ним.

Если введено неверное название для входа в оболочку или произошел сбой при расширении тильды, то префикс тильды остается неизменным.

Bash проверяет каждое присвоение переменной на наличие префиксов тильды без кавычек, следующих непосредственно за : или первым = и выполняет расширение тильды в этих случаях. Следовательно, можно использовать названия файлов с тильдами при присвоении PATH, MAILPATH и CDPATH и оболочка присвоит расширенное значение.

Bash также выполняет расширение тильдой слов, удовлетворяющих условиям присвоения переменных (как описано выше в разделе ПАРАМЕТРЫ), когда они появляются в качестве аргументов для простых команд. Bash не выполняет этого, за исключением команд declaration , перечисленных выше, в режиме posix.

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

Этот “$” символ указывает на расширение параметра, замену команды или арифметическое расширение. Название параметра или расширяемый символ могут быть заключены в фигурные скобки, которые необязательны, но служат для защиты расширяемой переменной от следующих непосредственно за ней символов, которые могут быть интерпретированы как часть названия.

При использовании фигурных скобок соответствующая конечная фигурная скобка является первой “}” не экранируется обратной косой чертой или строкой, заключенной в кавычки, и не используется во встроенном арифметическом расширении, замене команд или расширении параметров.

Основной формой расширения параметров является

${parameter}

который заменяет значение parameter. Фигурные скобки обязательны, если parameter является позиционным параметром, содержащим более одной цифры, или если за parameter следует символ, который не следует интерпретировать как часть его названия. Параметр parameter является параметром оболочки, как описано выше (ПАРАМЕТРЫ) или ссылкой на массив (Массивы).

Если первый символ parameter является восклицательным знаком (!), а parameter не является nameref, то это вводит определенный уровень косвенности. Bash использует значение, сформированное путем расширения остальной части parameter, в качестве нового параметра parameter; затем этот новый параметр расширяется, и это значение используется в остальной части расширения, а не в расширении исходного параметра parameter. Это называется косвенным расширением indirect expansion. Значение может быть расширено с помощью тильды, параметра, подстановки команд и арифметического расширения. Если parameter является значением nameref, то оно расширяется до названия параметра, на который ссылается parameter, вместо выполнения полного косвенного расширения для обеспечения совместимости. Исключением из этого правила являются расширения ${!prefix*} и ${!name[@]}, описанные ниже. Восклицательный знак должен стоять непосредственно за левой фигурной скобкой, чтобы ввести косвенность.

В каждом из приведенных ниже случаев слово word может быть расширено тильдой, расширено параметром, подменено командой и расширено арифметически.

Если не выполняется расширение подстроки, используя описанные ниже формы (например, :-), bash проверяет наличие параметра, который не задан или равен нулю. Без двоеточия выполняется проверка только для параметра, который не задан.

${parameter:-word}
Использовать значения по умолчанию Use Default Values. Если значение parameter не задано или равно нулю, то оно заменяется расширением слова word. В противном случае подставляется значение parameter.
${parameter:=word}
Присвоение значения по умолчанию Assign Default Values. Если значение parameter не задано или равно нулю, расширение слова word присваивается параметру parameter и расширение является окончательным значением параметра parameter. Позиционные параметры и специальные параметры не могут быть назначены таким образом.
${parameter:?word}
Ошибка отображения, если значение равно нулю или не задано Display Error if Null or Unset. Если параметр parameter равен нулю или не задан, то оболочка записывает расширение слова word (или соответствующее сообщение, если слово word отсутствует) в стандартную ошибку и, если оболочка не является интерактивной, то она завершает работу с ненулевым статусом. Интерактивная оболочка не существует, но она не выполняет команду, связанную с расширением. В противном случае подставляется значение parameter.
${parameter:+word}
Использование альтернативного значения Use Alternate Value. Если значение parameter равно нулю или не задано, ничего не заменяется, в противном случае заменяется расширение слова word. Значение parameter не используется.
${parameter:offset}
${parameter:offset:length}
Расширение подстроки Substring Expansion. Расширяется до символов length значения parameter, начиная с символа, указанного в смещении offset. Если parameter равен @ или *, то индексированный массив, подписанный @ или * или ассоциативное название массива, то результаты будут отличаться, как описано ниже. Если значение :length опущено (первая форма, приведенная выше), то оно расширяется до подстроки значения offset, начинающегося с символа, указанного в parameter и продолжающегося до конца значения. Если значение offset опущено, то оно рассматривается как 0. Если значение length опущено, но двоеточие после offset присутствует, то оно рассматривается как 0. Значения length и offset являются арифметическими выражениями (смотрите раздел АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ ниже).
Если значение offset равно числу, меньшему нуля, то это значение используется в качестве смещения в символах от конца значения parameter. Если значение длины length равно числу, меньшему нуля, это интерпретируется как смещение в символах от конца значения parameter, а не на количество символов, а расширением являются символы между offset и этим результатом. Примечание. Отрицательное смещение должно быть отделено от двоеточия по крайней мере одним пробелом, чтобы его не перепутать с расширением :-.
Если параметр parameter равен @ или *, то результатом будет длина length позиционных параметров, начинающихся со смещения offset. При отрицательном значении offset берется значение относительно значения, превышающего наибольший позиционный параметр, поэтому значение смещения, равное -1, вычисляется как значение последнего позиционного параметра (или 0, если позиционных параметров нет). Это ошибка расширения, если значение length равно числу, меньшему нуля.
Если parameter - это название индексированного массива, подписанное символом @ или *, то результатом будет length элементов массива, начинающихся с ${parameter[offset]}. Значение offset берется отрицательным относительно значения, на единицу превышающего максимальный индекс указанного массива. Если значение length меньше нуля, то это является ошибкой расширения.
Расширение подстроки, примененное к ассоциативному массиву, приводит к неопределенным результатам.
Индексация подстрок выполняется на основе нуля, если не используются позиционные параметры, и в этом случае индексация начинается с 1 по умолчанию. Если значение offset равно 0 и используются позиционные параметры, то префиксу списка присваивается значение $0.
${!prefix*}
${!prefix@}
Названия, соответствующие префиксу Names matching prefix. Расширяется до названий переменных, названия которых начинаются с prefix, отделенных первым символом специальной переменной IFS. Когда используется @ и расширение отображается в двойных кавычках, то каждое название переменной расширяется до отдельного слова.
${!name[@]}
${!name[*]}
Список ключей массива List of array keys. Если name является переменной массива, то расширяется до списка индексов массива (ключей), назначенных в name. Если name не является массивом, то расширяется до 0, если задано значение name, и ноль в противном случае. Когда используется @ и расширение приведено в двойных кавычках, то каждый ключ расширяется до отдельного слова.
${#parameter}
Длина параметра Parameter length. Заменяет длину в символах расширенного значения параметра parameter. Если parameter равен * или @, то заменяемое значение представляет собой количество позиционных параметров. Если parameter - это название массива, подписанное символом * или @, то подставляемое значение - это - количество элементов в массиве. Если parameter - это название индексированного массива, подписанное отрицательным числом, то это число интерпретируется как число отнесенное к единице, превышающей максимальный индекс parameter, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный -1, ссылается на последний элемент.
${parameter#word}
${parameter##word}
Удаление шаблона совпадающего префикса Remove matching prefix pattern. Слово wordрасширяется для получения шаблона, как и при расширении названия пути, и сопоставляется с расширенным значением параметра parameter с использованием правил, описанных в подразделе Сопоставление с шаблоном ниже. Если шаблон совпадает с началом значения parameter, то результатом расширения является расширенное значение parameter с кратчайшим совпадающим шаблоном (это “#” регистр) или удаляется самый длинный совпадающий шаблон (это “##” регистр). Если параметр parameter равен @ или *, то операция удаления шаблона применяется к каждому позиционному параметру по очереди, и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция удаления шаблона применяется к каждому элементу массива по очереди, а расширение - это результирующий список.
${parameter%word}
${parameter%%word}
Удаление шаблона совпадающего суффикса Remove matching suffix pattern. Слово word расширяется для получения шаблона точно так же, как при расширении названия пути, и сопоставляется с расширенным значением параметра parameter с использованием правил, описанных в подразделе Сопоставление с шаблоном ниже. Если шаблон соответствует конечной части расширенного значения parameter, то результатом расширения является расширенное значение parameter с кратчайшим совпадающим шаблоном (это “%” регистр) или удаляется самый длинный совпадающий шаблон (это “%%” регистр). Если параметр parameter равен @ или *, то операция удаления шаблона применяется к каждому позиционному параметру по очереди, и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция удаления шаблона применяется к каждому элементу массива по очереди, а расширение - это результирующий список.
${parameter/pattern/string}
${parameter//pattern/string}
${parameter/#pattern/string}
${parameter/%pattern/string}
Подстановка шаблона Pattern substitution. Шаблон pattern расширяется для получения шаблона и сопоставляется с расширенным значением parameter, как описано в подразделе Сопоставление с шаблоном ниже. Самое длинное совпадение с pattern в расширенном значении заменяется на string. Строка string подвергается расширению тильдой, расширению параметрами и переменными, арифметическому расширению, замене команд и процессов, а также удалению кавычек.
В первой приведенной выше форме заменяется только первое совпадение. Если есть две косые черты, разделяющие параметр parameter и шаблон pattern (вторая приведенная выше форма), то все совпадения pattern заменяются на строку string. Если шаблону patternпредшествует # (третья форма выше), то это должно совпадать с началом расширенного значения parameter. Если pattern предшествует % (четвертая форма выше), то это должно совпадать с расширенным значением parameter.
Если расширение string равно нулю, то совпадения с pattern удаляются, а символ /, следующий за pattern, может быть опущен.
Если опция оболочки patsub_replacement включена с помощью shopt, то все экземпляры & без кавычек в строке string заменяются соответствующей частью pattern.
Заключение в кавычки любой части строки string препятствует замене при расширении заключенной в кавычки части, включая строки для замены, хранящиеся в переменных оболочки. Обратная косая черта заменяет & в string ; обратная косая черта удаляется, чтобы разрешить использование литерала & в заменяющей строке. Обратная косая черта также может использоваться для экранирования обратной косой черты; \\ приводит к буквальной обратной косой черте при замене. Пользователи должны быть осторожны, если string заключена в двойные кавычки, чтобы избежать нежелательного взаимодействия между обратной косой чертой и двойными кавычками, поскольку обратная косая черта имеет особое значение в двойных кавычках. Замена шаблона выполняет проверку на наличие & без кавычек после расширения string; программисты оболочки должны указывать в кавычках все вхождения &, которые они хотят понимать буквально при замене, и убедиться, что все вхождения &, которые они хотят заменить, не заключены в кавычки.
Подобно операторам удаления шаблонов, двойные кавычки, окружающие строку замены, заключают расширенные символы в кавычки, в то время как двойные кавычки, заключающие всю замену параметра, этого не делают, поскольку расширение выполняется в контексте, который не учитывает никакие заключающие двойные кавычки.
Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов.
Если параметр parameter равен @ или *, то операция подстановки применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция подстановки применяется к каждому элементу массива по очереди, а расширение является результирующим списком.
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
Изменение регистра Case modification. Это расширение изменяет регистр буквенных символов в параметре parameter. Сначала шаблон pattern расширяется для создания шаблона, как описано ниже в подразделе Сопоставление с шаблоном. Затем Bash проверяет символы в расширенном значении parameter на соответствие с pattern, как описано ниже. Если символ соответствует шаблону, то его регистр изменяется. Шаблон не должен пытаться соответствовать более чем одному символу.
Используется “^” для преобразования строчных букв, соответствующих шаблону pattern , в заглавные; “,” преобразует соответствующие заглавные буквы в строчные. Варианты ^ и , проверяют первый символ в расширенном значении и преобразуют его регистр, если он соответствует шаблону pattern; варианты ^^ и ,, проверяют все символы в расширенном значении и преобразуют каждый из них, который соответствует pattern. Если pattern опущен, то он обрабатывается как ?, который соответствует каждому символу.
Если параметр parameter равен @ или *, то операция изменения регистра применяется к каждому позиционному параметру по очереди, и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция изменения регистра применяется к каждому элементу массива по очереди, а расширение является результирующим списком.
${parameter@operator}
Преобразование параметра Parameter transformation. Расширение представляет собой либо преобразование значения параметр parameter, либо информации о самом parameter, в зависимости от значения оператора operator. Каждый operator состоит из одной буквы:

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

Если parameter равен @ или *, то операция применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция применяется к каждому элементу массива по очереди и результатом расширения является результирующий список.

Результат расширения зависит от разделения слов и расширения названия пути, как описано ниже.

Подстановка команд

Подстановка команды Command substitution позволяет при выводе команды заменить саму команду. Существует две стандартные формы:

$(command)

или (устарело)
`command`.

Bash протизводит расширение, выполняя command в окружающей среде подоболочки и заменяя подстановку команды стандартным выводом команды, при этом удаляются все завершающие новые строки. Встроенные новые строки не удаляются, но они могут быть удалены при разделении слов. Команда подстановки $(cat file) может быть заменена эквивалентной, но более быстрой командой $(< file).

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

Существует альтернативная форма замены команд:

${c command;}

которая выполняет команду command в текущей окружающей среде и записывает свои выходные данные, опять же с удалением завершающих новых строк.

Символ c, следующий за открывающей фигурной скобкой, должен быть пробелом, знаком табуляции, новой строкой или |, а закрывающая фигурная скобка должна находиться в позиции, в которой может отображаться зарезервированное слово (т.е. перед ним должен стоять символ завершения команды: точка с запятой). Bash позволяет соединять закрывающую фигурную скобку с остальными символами без добавления метасимвола оболочки, как это обычно требуется для зарезервированного слова.

Любые побочные эффекты command вступают в силу немедленно в текущей окружающей среде и сохраняются в текущей среде после завершения выполнения команды (например, встроенная команда exit завершает работу оболочки).

Этот тип подстановки команд внешне напоминает выполнение не именованной функции оболочки: локальные переменные создаются так же, как при выполнении функции оболочки, а встроенная команда return принудительно завершает выполнение команды command; однако остальная окружающая среда, включая позиционные параметры, совместно используется вызывающей стороной.

Если первым символом, следующим за открытой фигурной скобкой, является |, то конструкция расширяется до значения переменной команды REPLY после выполнения command, без удаления завершающих символов новой строки, а стандартный вывод command остается таким же, как и в вызывающей оболочке. Bash создает REPLY как изначально не установленную локальную переменную при выполнении command и восстанавливает REPLY до значения, которое оно имело до замены команды, после завершение command, как и в случае с любой локальной переменной.

Замены команд могут быть вложенными. Для вложения при использовании формы с обратными кавычками, закройте внутренние кавычки обратной косой чертой.

Если замена выполняется в двойных кавычках, то bash не выполняет разбиение слов и результаты расширения пути.

Арифметическое расширение

Арифметическое расширение вычисляет арифметическое выражение и подставляет результат. Формат арифметического расширения следующий:

$((expression))

Старый формат $[expression] устарел и будет удален в следующих версиях bash.

Это расширение expression расширяется так же, как если бы оно было заключено в двойные кавычки, но неэкранированные символы двойных кавычек в expression не обрабатываются специальным образом и удаляются. Все токены в выражении расширяются с помощью параметров и переменных, заменяются командой и удаляются кавычки. Результат обрабатывается как вычисляемое арифметическое выражение. Поскольку способ, которым Bash обрабатывает двойные кавычки, потенциально может привести к появлению пустых строк, арифметическое расширение рассматривает их как выражения, значение которых равно 0. Арифметические расширения могут быть вложенными.

Вычисление выполняется в соответствии с правилами, перечисленными ниже в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ. Если значение expression неверно, то bash выводит сообщение о стандартной ошибке и не выполняет подстановку, а также не выполняет команду, связанную с расширением.

Подстановка процесса

Подстановка процесса Process substitution позволяет ссылаться на входные или выходные данные процесса, используя название файла. Она принимает форму <(list) или >(list). Процесс список list выполняется асинхронно, а его входные или выходные данные отображаются в виде названия файла. Это, полученное в результате расширения, название файла передается в качестве аргумента текущей команде.

Если используется форма >(list), то запись в файл обеспечивает ввод данных для list. Если используется форма <(list), то при чтении файла выводится list. Между < или > и левой круглой скобкой не должно быть пробела, иначе конструкция будет интерпретирована как перенаправление.

Замена процессов поддерживается в системах, поддерживающих именованные каналы (FIFOs) или метод именования открытых файлов /dev/fd.

При наличии возможности подстановка процесса выполняется одновременно с расширением параметров и переменных, подстановкой команд и арифметическим расширением.

Разделение слов

Оболочка проверяет результаты расширения параметров, подстановки команд и арифметического расширения, которые не были заключены в двойные кавычки, на предмет word splitting. Слова, которые не были расширены, не разбиваются.

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

Символ IFS whitespace - это пробел, определенный выше (смотрите подраздел Определения), который появляется в значении IFS. Пробел, табуляция и новая строка всегда считаются пробелами, даже если они не входят в категорию пробел space в локали.

Если значение IFS не задано, то разделение поля выполняется так, как если бы его значением было <space><tab><newline>, а эти символы рассматриваются как пробелы IFS. Если значение IFS равно нулю, то разбиение слов не происходит, но неявные нулевые аргументы (см. ниже) все равно удаляются.

Разделение слов начинается с удаления последовательностей пробельных символов IFS из начала и конца результатов предыдущих расширений, затем происходит разделение оставшихся слов.

Если значение IFS состоит исключительно из пробелов IFS, то любая последовательность символов IFS разделяет поле, поэтому поле состоит из символов, которые не являются пробелами IFS без кавычек, а пустые поля являются результатом только заключения в кавычки.

Если IFS содержит символ, не являющийся пробельным, то любой символ в значении IFS, который не является пробельным, вместе с любыми соседними символами IFS, отделяют поле. Это означает, что соседние разделители, отличные от пробелов IFS, создают пустое поле. Последовательность символов пробелов IFS также ограничивает поле.

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

Когда аргумент ноль, заключенный в кавычки, появляется как часть слова, расширение которого не равно нулю, то при разделении слов удаляется нулевая часть аргумента, оставляя ненулевое расширение. То есть становится “-d''” словом “-d” после разделения слов и удаления нулевого аргумента.

Расширение названия пути

После разделения слов, если не установлена опция -f, bash проверяет каждое слово на наличие символов *, ? и [. Если один из этих символов обнаружен и не заключен в кавычки, то слово рассматривается как шаблон pattern и заменяется отсортированным списком названий файлов, соответствующих шаблону (смотрите подраздел Сопоставление с шаблоном ниже), в зависимости от значения переменной оболочки GLOBSORT.

If no matching filenames are found, and the shell option nullglob is not enabled, the word is left unchanged. If the nullglob option is set, and no matches are found, the word is removed. If the failglob shell option is set, and no matches are found, bash prints an error message and does not execute the command. If the shell option nocaseglob is enabled, the match is performed without regard to the case of alphabetic characters. Note that when using range expressions like [a-z] (see below), letters of the other case may be included, depending on the setting of LC_COLLATE.

Когда для расширения названия пути используется шаблон, то символ “.” в начале названия или сразу после него должна быть явно указана косая черта, если только не задана опция оболочки dotglob. Для соответствия названий файлов . и .., шаблон должен начинаться “.” (например, “.?”), даже если задана опция dotglob. Если опция оболочки globskipdots включена, то названия файлов . и .. никогда не будут совпадает, даже если шаблон начинается с “.”. Если названия путей не совпадают, то “.” символ не обрабатывается особым образом.

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

Смотрите описание команды shopt ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ для получения описаний опций оболочки nocaseglob, nullglob, globskipdots, failglob и dotglob.

Переменная оболочки GLOBIGNORE может использоваться для ограничения набора названий файлов, соответствующих шаблону pattern. Если задано значение GLOBIGNORE, т все совпадающие названия файлов, которые также соответствуют одному из шаблонов в GLOBIGNORE, удаляются из списка совпадений. Если установлена опция nocaseglob, то сопоставление с шаблонами в GLOBIGNORE выполняется без учета регистра. Названия файлов . и .. всегда игнорируется, если задано не нулевое значение GLOBIGNORE. Однако установка для GLOBIGNORE ненулевого значения приводит к включению опции оболочки dotglob, поэтому все остальные названия файлов, начинающиеся с “.” совпадение. Чтобы вернуть прежнее поведение при игнорировании названий файлов, начинающихся с “.”, создает “.*” один из шаблонов в GLOBIGNORE. Опция dotglob отключена, если параметр GLOBIGNORE не установлен. При сопоставлении с шаблоном GLOBIGNORE учитывается настройка опции оболочки extglob.

Значение переменной оболочки GLOBSORT определяет порядок сортировки результатов расширения названия пути, как описано выше в подразделе Переменные оболочки.

Сопоставление с шаблоном

Любой символ, который появляется в шаблоне, за исключением специальных символов шаблона, описанных ниже, соответствует самому себе. Символ NUL может не встречаться в шаблоне. Обратная косая черта заменяет следующий символ; при сопоставлении экранирующая обратная косая черта отбрасывается. Специальные символы шаблона должны быть заключены в кавычки, если они должны быть подобраны буквально.

Специальные символы шаблона имеют следующие значения:

*
Соответствует любой строке, включая нулевую строку. Когда опция оболочки globstar включена и * используется в контексте расширения названия пути, то два соседних *, используемых в качестве единого шаблона, соответствуют всем файлам и нулю или более каталогам и подкаталогам. Если за ним следует /, то две соседние буквы * соответствуют только каталогам и подкаталогам.
?
Соответстветствие любому отдельному символу.
[...]
Соответствует любому из символов, заключенных в квадратные скобки. Это называется выражением в квадратных скобках bracket expression и соответствует одному символу. Пара символов, разделенных дефисом, обозначает выражение диапазона range expression; любой символ, который находится между этими двумя символами включительно, использует последовательность сопоставлений и набор символов, соответствующих текущей локали. Если первым символом, следующим за [, является ! или ^, то соответствует любой символ, не входящий в диапазон. Чтобы соответствовать -, включите его в качестве первого или последнего символа в наборе. Чтобы соответствовать символу ], включите его в качестве первого символа в наборе.
Порядок сортировки символов в выражениях диапазона и символы, включенные в диапазон, определяются текущей локалью и значениями, если они установлены, переменных оболочки LC_COLLATE или LC_ALL. Чтобы получить традиционную интерпретацию выражений диапазона, где [a-d] эквивалентно [abcd], установите значение переменных оболочки LC_COLLATE или LC_ALL равным C или включите опцию оболочки globasciiranges.
В выражении, заключенном в квадратные скобки, классы символов character classes могут быть указаны с использованием синтаксиса [:class:], где class - это один из следующих классов, определенных в стандарте POSIX
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
Класс символов соответствует любому символу, принадлежащему к этому классу. Класс символов слова word соответствует буквам, цифрам и символу _.
В выражении, заключенном в квадратные скобки, класс эквивалентности equivalence class может быть указан с использованием синтаксиса [=c=], который сопоставляет все символы с тем же значением сортировки (как определено текущей локалью), что и символ c.
В выражении, заключенном в квадратные скобки, синтаксис [.symbol.] соответствует сопоставляющему символу symbol.

Если включена опция оболочки extglob с помощью встроенной команды shopt, то оболочка распознает несколько расширенных операторов сопоставления с шаблоном. В следующем описании список шаблонов pattern-list - это список из одного или нескольких шаблонов, разделенных символом |. Составные части могут быть сформированы с использованием одного или нескольких следующих подшаблонов:

?(pattern-list)
Соответствует нулю или одному появлению в заданных шаблонах.
*(pattern-list)
Соответствует нулю или одному появлению в заданных шаблонах.
+(pattern-list)
Соответствует нулю или одному появлению в заданных шаблонах.
@(pattern-list)
Соответствует одному появлению в заданных шаблонах.
!(pattern-list)
Соответствует всему, кроме одного из заданных шаблонов.

Опция extglob изменяет поведение синтаксического анализатора, поскольку круглые скобки обычно рассматриваются как операторы с синтаксическим значением. Чтобы обеспечить корректный анализ расширенных шаблонов сопоставления, убедитесь, что extglob включено перед анализом конструкций, содержащих шаблоны, включая функции оболочки и замены команд.

При сопоставлении названий файлов опция оболочки dotglob определяет набор проверяемых названий файлов: когда включено dotglob, набор названий файлов включает все файлы, начинающиеся с “.”, but . и .. должен соответствовать шаблону или вложенному шаблону, начинающемуся с точки; если он отключен, то в набор не включаются названия файлов, начинающиеся с “.” если только шаблон или субшаблон не начинается с “.”. Если опция оболочки globskipdots включена, то названия файлов . и .. никогда не появляется в наборе. Как указано выше, “.” имеет особое значение только при совпадениях названий файлов.

Сложное расширенное сопоставления с шаблоном с длинными строками выполняется медленно, особенно если шаблоны содержат чередования, а строки содержат множество совпадений. Используйте отдельные совпадения с более короткими строками или используйте массивы строк вместо одной длинной строки.

Удаление кавычки

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

ПЕРЕНАПРАВЛЕНИЕ

Перед выполнением команды ее ввод и вывод могут быть перенаправлены с использованием специальной нотации, интерпретируемой оболочкой. Перенаправление redirected позволяет дублировать файловые дескрипторы команд, открывать, закрывать их, указывать на разные файлы и изменять файлы, из которых команда считывает и в которые записывает данные. При использовании со встроенной команды exec перенаправления изменяют файловые дескрипторы в текущей среде выполнения оболочки. Следующие операторы перенаправления могут предшествовать или отображаться в любом месте простой команд simple command или могут следовать за командой command. Перенаправления обрабатываются в том порядке, в котором они отображаются, слева направо.

Каждому перенаправлению, которому может предшествовать номер файлового дескриптора, вместо этого может предшествовать слово вида название файла varname. В этом случае для каждого оператора перенаправления, за исключением >&- и <&-, оболочка выделяет файловый дескриптор, который больше или равен 10 и присваивает ему значение varname. Если varname предшествует >&- или <&-, то значение varname определяет дескриптор файла, который необходимо закрыть.Если указано значение {varname}, то перенаправление сохраняется за пределами действия команды, что позволяет программисту оболочки вручную управлять временем жизни файлового дескриптора без использования встроенной команды exec. Опция оболочки varredir_close управляет этим поведением.

В следующих описаниях, если номер файлового дескриптора опущен, а первый символ оператора перенаправления равен “<”, перенаправление ссылается на стандартный ввод (файловый дескриптор 0). Если первый символ оператора перенаправления равен “>”, перенаправление ссылается на стандартный вывод (файловый дескриптор 1).

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

Порядок перенаправлений имеет значение. Например, команда

ls > dirlist 2>&1

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

ls 2>&1 > dirlist

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

Bash специально обрабатывает несколько названий файлов, когда они используются в перенаправлениях, как описано в следующей таблице. Если операционная система, на которой запущена bash, предоставляет эти специальные файлы, то bash использует их; в противном случае она эмулирует их внутренне с помощью поведения, описанного ниже.

/dev/fd/fd
Если fd является допустимым целым числом, то дублировать файловый дескриптор fd.
/dev/stdin
Файловый дескриптор 0 дублируется.
/dev/stdout
Файловый дескриптор 1 дублируется.
/dev/stderr
Файловый дескриптор 2 дублируется.
/dev/tcp/host/port
Если host - допустимое название хоста или адрес интернет, а port - целочисленный номер порта или название службы, то bash попытается открыть соответствующий сокет TCP.
/dev/udp/host/port
Если host - допустимое название хоста или адрес интернет, а port - целочисленный номер порта или название службы, то bash попытается открыть соответствующий сокет UDP.

Сбой при открытии или создании файла приводит к сбою перенаправления.

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

Обратите внимание, что встроенная команда exec может заставить вступить в силу перенаправления в текущей оболочке.

Перенаправление ввода

При перенаправлении ввода открывается файл, название которого является результатом расширения слова word для чтения по файловому дескриптору n или стандартный ввод (файловый дескриптор 0), если n не указано.

Общий формат для перенаправления входных данных следующий:

[n]<word

Перенаправление вывода

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

Общий формат для перенаправления выходных данных следующий:

[n]>word

Если оператором перенаправления является > и включена опция noclobber для встроенной команды set, то перенаправление завершается ошибкой, если файл, название которого является результатом расширения слова word, существует и является обычным файлом. Если оператором перенаправления является >| или оператором перенаправления является >, а опция noclobber для встроенной команды set не включена, то bash попытается перенаправить, даже если файл, названный word существует.

Добавление перенаправленных выходных данных

При перенаправлении вывода таким образом открывается файл, название которого является результатом расширения слова word для добавления к файловому дескриптору n, или стандартный вывод (файловый дескриптор 1), если n не указано. Если файл не существует, то он создается.

Общий формат для добавления выходных данных следующий:

[n]>>word

Перенаправление стандартного вывода и стандартной ошибки

Эта конструкция перенаправляет как стандартный вывод (файловый дескриптор 1), так и стандартный вывод об ошибке (файловый дескриптор 2) в файл, название которого является расширением слова word.

Существует два формата для перенаправления стандартного вывода и стандартной ошибки:

&>word

и
>&word

Из двух форматов предпочтительнее первый. Семантически это эквивалентно

>word 2>&1

При использовании второго формата слово word может не расширяться до числа или -. Если это так, то, по соображениям совместимости, применяются другие операторы перенаправления (смотрите подраздел Дублирование файловых дескрипторов ниже).

Добавление стандартного вывода и стандартной ошибки

Эта конструкция добавляет как стандартный вывод (файловый дескриптор 1), так и стандартный вывод об ошибке (файловый дескриптор 2) к файлу, название которого является расширением слова word.

Формат для добавления стандартного вывода и стандартной ошибки следующий:

&>>word

Это семантически эквивалентно

>>word 2>&1

(смотрите подраздел Дублирование файловых дескрипторов ниже).

Здесь документы

Перенаправление "Здесь документы" (Here Documents) предписывает оболочке считывать входные данные из текущего источника до тех пор, пока она не прочитает строку, содержащую только разделитель delimiter (без завершающих пробелов). Все строки, прочитанные до этого момента, затем становятся стандартными входными данными (или файловым дескриптором n, если указано n) для команды.

Формат документов here-documents следующий:

[n]<<[-]word

here-document delimiter

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

Если какая-либо часть слова word заключена в кавычки, то разделитель delimiter является результатом удаления кавычек в слове word и строки в документе here-document не расширяются. Если word не заключено в кавычки, то delimiter - это само слово word и текст документа here-document обрабатывается аналогично строке, заключенной в двойные кавычки: все строки документа here-document подвергаются расширению параметров, замене командами и арифметическому расширению, последовательность символов \<newline> трактуется буквально, а \ необходимо использовать для заключения в кавычки символов \, $ и `; однако символы двойных кавычек не имеют специального значения.

Если оператором перенаправления является <<-, то оболочка удаляет все начальные символы табуляции из строк ввода и строки, содержащей delimiter. Это позволяет естественным образом использовать отступы в текстовых документах в сценариях оболочки.

Если разделитель не заключен в кавычки, то последовательность \<newline> рассматривается как продолжение строки: две строки соединяются, а обратная косая черта-новая строка удаляется. Это происходит при чтении документа here-document, перед проверкой наличия конечного разделителя, поэтому соединенные строки могут образовывать конечный разделитель.

Здесь строки

Вариант документов "Здесь строки" (Here Strings) имеет следующий формат:

[n]<<<word

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

Дублирование файловых дескрипторов

Оператор перенаправления

[n]<&word

используется для дублирования входных файловых дескрипторов. Если слово word расширяется до одной или нескольких цифр, то файловый дескриптор n становится копией этого файлового дескриптора. Ошибка перенаправления возникает, если цифры в word не указывают на файловый дескриптор, открытый для ввода. Если значение word равно -, то файловый дескриптор n закрыт. Если n не указано, то используется стандартный ввод (файловый дескриптор 0).

Оператор перенаправления

[n]>&word

используется аналогично для дублирования выходных файловых дескрипторов. Если n не указано, то используется стандартный вывод (файловый дескриптор 1). Если цифры в word не указывают файловый дескриптор, открытый для вывода, то это означает ошибку перенаправления. Если значение word равно -, то файловый дескриптор n закрывается. В качестве особого случая, если n опущено, а word не расширяется до одной или нескольких цифр или -, это перенаправляет стандартный вывод и стандартную ошибку, как описано ранее.

Перемещение файловых дескрипторов

Оператор перенаправления

[n]<&digit-

перемещает файловый дескриптор со значением digit в файловый дескриптор со значением n или в стандартный ввод (файловый дескриптор 0), если n не указано. Дескриптор со значением digit закрывается после дублирования в n.

Аналогично, оператор перенаправления

[n]>&digit-

перемещает файловый дескриптор со значением digit в файловый дескриптор со значением n или в стандартный вывод (файловый дескриптор 1), если n не указано.

Открытие файловых дескрипторов для чтения и записи

Оператор перенаправления

[n]<>word

открывает файл, название которого является расширением слова word, как для чтения, так и для записи по файловому дескриптору n или по файловому дескриптору 0, если n не указано. Если файл не существует, то он создается.

ПСЕВДОНИМЫ

Псевдонимы Aliases позволяют подставлять строку вместо слова, которое находится в позиции во входных данных, где оно может быть первым словом простой команды. Псевдонимы имеют названия и соответствующие значения, которые устанавливаются и отменяются с помощью встроенных команд alias и unalias (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

Если оболочка считывает слово без кавычек в правильной позиции, то она проверяет, соответствует ли оно псевдониму. Если оно соответствует, то оболочка заменяет слово значением псевдонима и считывает это значение, как если бы оно было прочитано вместо слова. Оболочка не просматривает символы, следующие за словом, перед попыткой замены псевдонима.

Символы /, $, ` и =, а также любые из перечисленных выше метасимволов metacharacters оболочки или кавычек могут отсутствовать в псевдониме. Заменяющий текст может содержать любые допустимые входные данные оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на наличие псевдонимов, но слово, идентичное раскрываемому псевдониму, не раскрывается во второй раз. Это означает, что можно, например, заменить ls на ls -F и bash не будет пытаться рекурсивно расширять заменяющий текст.

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

Псевдонимы создаются и выводятся с помощью команды alias, а удаляются с помощью команды unalias.

В заменяющем тексте нет механизма для использования аргументов. Если аргументы необходимы, то используйте функцию оболочки (смотрите раздел ФУНКЦИИ ниже).

Псевдонимы не раскрываются, когда оболочка не является интерактивной, если только опция оболочки expand_aliases не задана с помощью команды shopt (смотрите описание shopt в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

Правила, касающиеся определения и использования псевдонимов, несколько запутанны. Bash всегда считывает по крайней мере одну полную строку ввода и все строки, которые составляют составную команду, перед выполнением любой из команд в этой строке или составной команды. Псевдонимы раскрываются при чтении команды, а не при ее выполнении. Следовательно, определение псевдонима, появляющееся в той же строке, как и другая команда, и не вступит в силу до тех пор, пока оболочка не прочитает следующую строку ввода, а определение псевдонима в составной команде не вступит в силу до тех пор, пока оболочка не проанализирует и не выполнит всю составную команду целиком. Новый псевдоним не влияет на команды, следующие за определением псевдонима в этой строке или в остальной части составной команды. Такое поведение также является проблемой при выполнении функций. Псевдонимы раскрываются при чтении определения функции, а не при выполнении функции, поскольку определение функции само по себе является командой. Как следствие, псевдонимы, определенные в функции, недоступны до тех пор, пока эта функция не будет выполнена. На всякий случай всегда выносите определения псевдонимов в отдельную строку и не используйте псевдоним alias в составных командах.

Почти для всех целей функции оболочки предпочтительнее псевдонимов.

ФУНКЦИИ

Функция оболочки, определенная, как описано выше, в разделе ГРАММАТИКА ОБОЛОЧКИ, хранит последовательность команд для последующего выполнения. Когда название функции оболочки используется в качестве простого названия команды, тогда оболочка выполняет список команд, связанных с этим названием функции. Функции выполняются в контексте вызывающей оболочки; для их интерпретации не создается новый процесс (сравните это с выполнением сценария оболочки).

Когда функция выполняется, аргументы функции становятся позиционными параметрами во время ее выполнения. Специальный параметр # обновляется, чтобы отразить новые позиционные параметры. Специальный параметр 0 остается неизменным. Первому элементу переменной FUNCNAME присваивается значение названия функции во время ее выполнения.

Все остальные аспекты окружающей среды выполнения оболочки идентичны для функции и её вызова, со следующими исключениями: ловушки DEBUG и RETURN не наследуются (смотрите описание встроенной ловушки в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), если функции не присвоен атрибут trace (смотрите описание встроенной команды declare ниже) или, если не включена опция оболочки -o functrace с помощью встроенной команды set (в этом случае все функции наследуют ловушки DEBUG и RETURN), но ловушка ERR не наследуется, если не включена опция оболочки -o errtrace.

Переменные, локальные для функции, объявляются с помощью встроенной команды local (локальные переменные local variables). Обычно переменные и их значения совместно используются функцией и её вызовом. Если переменная local объявлена как локальная, то область видимости переменной ограничивается этой функцией и ее дочерними процессами (включая функции, которые она вызывает).

В следующем описании текущая область current scope - это выполняемая в данный момент функция. Предыдущие области состоят из вызывающего объекта этой функции и так далее, вплоть до “global” область видимости, в которой оболочка не выполняет никаких функций оболочки. Локальная переменная в текущей области видимости - это переменная, объявленная с использованием встроенных команд local или declare в выполняемой в данный момент функции.

Локальные переменные “shadow” это переменные с одинаковыми названиями, объявленные в предыдущих областях. Например, локальная переменная, объявленная в функции, скрывает переменные с одинаковыми названиями, объявленные в предыдущих областях, включая глобальные переменные: ссылки и присвоения ссылаются на локальную переменную, оставляя переменные в предыдущих областях неизмененными. Когда функция возвращается, глобальная переменная снова становится видимой.

Оболочка использует динамическую область видимости dynamic scoping для управления видимостью переменной в функциях. При динамической области видимости видимые переменные и их значения являются результатом последовательности вызовов функций, которые привели к выполнению текущей функции. Значение переменной, которое видит функция, зависит от ее значения в вызывающем объекте, если таковое имеется, независимо от того, является ли вызывающий объект глобальной областью видимости или другой функцией оболочки. Это также значение, которое скрывается в объявлении локальной переменной и значение, которое восстанавливается при возврате функции.

Например, если переменная var объявлена как локальная в функции func1, а func1 вызывает другую функцию func2, то ссылки на var, сделанные из func2, преобразуются в локальную переменную var из func1, заменяющую любую глобальную переменную с названием var.

Встроенная команда unset также работает с использованием той же динамической области: если переменная является локальной для текущей области, то unset сбрасывает ее; в противном случае команда unset будет ссылаться на переменную, найденную в любой вызывающей области, как описано выше. Если переменная в текущей локальной области не установлена, то она остается неизменной (отображается как unset) до тех пор, пока она не будет сброшена в этой области или пока функция не вернется. Как только функция вернется, любой экземпляр переменной в предыдущей области становится видимым. Если unset воздействует на переменную в предыдущей области видимости, то любой экземпляр переменной с таким названием, который был скрыт, становится видимым (смотрите ниже, как опция оболочки localvar_unset изменяет это поведение).

Переменная FUNCNEST, если для нее задано числовое значение, превышающее 0, определяет максимальный уровень вложенности функции. Вызовы функций, превышающие этот предел, приводят к прерыванию выполнения всей команды.

Если в функции выполняется встроенная команда return, то функция завершает работу и выполнение возобновляется следующей командой после вызова функции. Если в return задан числовой аргумент, то это - статус возврата функции; в противном случае статус возврата функции это - статус завершения последней команды, выполненной перед return. Любая команда, связанная с ловушкой RETURN, выполняется до продолжения выполнения. Когда функция завершается, значения позиционных параметров и специального параметра # возвращаются к значениям, которые они имели до выполнения функции.

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

Функции могут быть рекурсивными. Переменная FUNCNEST может использоваться для ограничения глубины стека вызовов функций и количества вызовов функций. По умолчанию bash не накладывает ограничений на количество рекурсивных вызовов.

АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ

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

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

переменные значения инкремент и декремент
++id --id
переменный прединкремент и преддекремент
- +
унарный минус и плюс
! ~
логическая и побитовая инверсия
**
возведение в степень
* / %
умножение, деление, остаток
+ -
сложение, вычитание
<< >>
побитовые сдвиги влево и вправо
<= >= < >
сравнение
== !=
равенство и неравенство
&
побитовое логическое И
^
побитовое логическое исключающее ИЛИ
|
побитовое логическое ИЛИ
&&
логическое И
||
логическое ИЛИ
оператор ветвления (условие)
= *= /= %= += -= <<= >>= &= ^= |=
назначение, распределение
запятая

Переменные оболочки допустимы в качестве операндов; расширение параметров выполняется до вычисления выражения. Внутри выражения на переменные оболочки также можно ссылаться по названию, не используя синтаксис расширения параметров. Это означает, что вы можете использовать "x", где x - это название переменной оболочки, в арифметическом выражении и оболочка вычислит ее значение как выражение и использует результат. Переменная оболочки, которая имеет значение нуль или не определена, принимает значение 0, если на нее ссылается название в выражении.

Значение переменной вычисляется как арифметическое выражение, когда на нее ссылаются или когда переменной, которой присвоен атрибут целое число integer с помощью команды declare -i в качестве значения. Значение ноль (null) равно 0. Для использования в выражении переменной оболочки необязательно, чтобы ее атрибут integer был включен.

Целочисленные константы соответствуют определению языка Си, без суффиксов или символьных констант. Константы, начинающиеся с 0, интерпретируются как восьмеричные числа. 0x или 0XX обозначают шестнадцатеричные числа. В противном случае числа принимают форму [base#]n, где необязательное base - это десятичное число от 2 до 64, представляющее арифметическое основание системы счисления, а n - значение основания системы счисления. Если основание base# опущено, то используется основание 10. При указании n, если не требуется указывать цифру, цифры больше 9 обозначаются строчными буквами, прописными буквами @ и _ в указанном порядке. Если значение base меньше или равно 36, то строчные и прописные буквы могут использоваться взаимозаменяемо для обозначения чисел от 10 до 35.

Операторы вычисляются в порядке приоритета. Подвыражения в круглых скобках вычисляются первыми и могут переопределять правила приоритета, приведенные выше.

УСЛОВНЫЕ ВЫРАЖЕНИЯ

Условные выражения используются составной командой [[ и встроенными командами test и [ для проверки атрибутов файла и выполнения строковых и арифметических сравнений. Команды test и [ определяют свое поведение на основе количества аргументов; смотрите описания этих команд для любых других действий, связанных с командами.

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

Bash специально обрабатывает несколько названий файлов, когда они используются в выражениях. Если операционная система, на которой запущена bash, предоставляет эти специальные файлы, то bash будет использовать их; в противном случае она будет эмулировать их внутренне следующим образом: Если какой-либо аргумент файла file для одного из основных параметров имеет вид /dev/fd/n, затем bash проверяет файловый дескриптор n. Если аргумент file для одного из основных параметров является одним из /dev/stdin, /dev/stdout, или /dev/stderr, bash проверяет файловый дескриптор 0, 1 или 2 соответственно.

Если не указано иное, то в первую очередь обрабатываются файлы символических ссылок , при этом обрабатываются адресат ссылки, а не сама ссылка.

При использовании с [[ или когда оболочка находится в режиме posix, операторы < и > выполняют лексикографическую сортировку с использованием текущей локали. Когда оболочка не находится в режиме posix, команда test выполняет сортировку с использованием порядка ASCII.

Истинно, если файл file существует.
Истинно, если file существует и является блочным специальным файлом.
Истинно, если файл file существует и является специальным символическим файлом.
Истинно, если файл file существует и является каталогом.
Истинно, если файл file существует.
Истинно, если файл file существует и является обычным файлом.
Истинно, если файл file существует и имеет значение set-group-id.
Истинно, если файл file существует и является символической ссылкой.
Истинно, если файл file существует и его “sticky” бит установлен.
Истинно, если файл file существует и является именованным каналом (FIFO).
Истинно, если файл file существует и доступен для чтения.
Истинно, если файл file существует и имеет размер больше нуля.
Истинно, если файловый дескриптор fd открыт и ссылается на терминал.
Истинно, если файл file существует и установлен его бит set-user-id.
Истинно, если файл file существует и доступен для записи.
Истинно, если файл file существует и является исполняемым.
Истинно, если файл file существует и имеет эффективный идентификатор группы.
Истинно, если файл file существует и является символической ссылкой.
Истинно, если файл file существует и был изменен с момента последнего обращения к нему.
Истинно, если файл file существует и имеет эффективный идентификатор пользователя.
Истинно, если файл file существует и является сокетом.
Истинно, если включена опция оболочки optname. Смотрите список опций в описании опции -o для встроенной команды set ниже.
Истинно (true), если задана переменная оболочки varname (ей присвоено значение). Если varname - это название переменной индексированного массива с подписью @ или *, то возвращается значение true, если в массиве есть какие-либо заданные элементы. Если varname - это название переменной ассоциативного массива с подписью @ или *, то возвращается значение true, если задан элемент с таким ключом.
Истинно, если установлена переменная оболочки varname, которая является ссылкой на название.
Истинно, если длина строки string равна нулю.
Истинно, если длина string отлична от нуля.
Истинно (true), если строки равны. = следует использовать с командой test для проверки соответствия POSIX командой [[ выполняется сопоставление с шаблоном, как описано выше (подраздел Составные команды).
Истинно, если строки не равны.
Истинно, если строка string1 лексикографически сортируется перед строкой string2.
Истинно, если строка string1 сортируется лексикографически после строки string2.
file1 -ef file2
Истинно, если файлы file1 и file2 ссылаются на одно и то же устройство и инод.
Истинно, если файл file1 более новый (в соответствии с датой изменения), чем файл file2 или если файл file1 существует, а файл file2 не существует.
Истинно, если файл file1 старше, чем файл file2 или если файл file2 существует, а файл file1 не существует.
OP является одним из -eq, -ne, -lt, -le, -gt или -ge. Эти арифметические двоичные операторы возвращают значение true, если значение arg1 равно, не равно, меньше, меньше или равно, больше или больше, чем значение arg2, соответственно. arg1 и arg2 могут быть положительными или отрицательными целыми числами. При использовании с командой [[ arg1 и arg2 вычисляются как арифметические выражения (смотрите раздел АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ выше). Поскольку расширения, выполняемые командой [[ для arg1 и arg2, потенциально могут привести к пустым строкам, вычисление арифметических выражений обрабатывает их как выражения, значение которых равно 0.

ПРОСТОЕ РАСШИРЕНИЕ КОМАНДЫ

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

1.
Слова, которые синтаксический анализатор пометил как присвоения переменным (т.е. то, что предшествуют названию команды) и перенаправления, сохраняются для последующей обработки.
2.
Слова, которые не являются назначениями переменных или перенаправлениями, раскрываются. Если после расширения остаются какие-либо слова, то первое слово принимается за название команды, а остальные слова - за аргументы.
3.
Перенаправления выполняются так, как описано выше, в разделе ПЕРЕНАПРАВЛЕНИЕ.
4.
Текст после символа = в каждом присвоении переменной подвергается расширению тильдой, расширению параметров, подстановке команд, арифметическому расширению и удалению кавычек, прежде чем быть присвоенным переменной.

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

Если в результате данной команды выполняется перенаправление, то оно не влияет на текущую окружающую среду оболочки. Ошибка перенаправления приводит к завершению выполнения команды с ненулевым статусом.

Если после расширения осталось название команды, то выполнение продолжается, как описано ниже. В противном случае команда завершается. Если одно из расширений содержало замену команды, то статус завершения команды соответствует статусу завершения последней выполненной замены команды. Если замены команд не было, то команда завершает работу с нулевым статусом.

ВЫПОЛНЕНИЕ КОМАНДЫ

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

Если команда не содержит косых черт, то оболочка пытается найти их. Если существует функция оболочки с таким названием, то эта функция вызывается, как описано выше в разделе ФУНКЦИИ. Если название функции не совпадает, то оболочка выполняет поиск функции в списке встроенных функций оболочки. Если найдено совпадение, то вызывается эта встроенная функция.

Если название не является ни функцией оболочки, ни встроенной командой и не содержит косых черт, то bash выполняет поиск в каждом элементе PATH каталога, содержащего исполняемый файл с таким названием. Оболочка Bash использует хэш-таблицу для запоминания полных путей к исполняемым файлам (смотрите hash в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Оболочка Bash выполняет полный поиск по каталогам в PATH только в том случае, если команда не найдена в хэш-таблице. Если поиск не увенчался успехом, то оболочка выполняет поиск определенной функции оболочки с названием command_not_found_handle. Если эта функция существует, то она вызывается в отдельной среде выполнения с исходной командой и аргументами исходной команды в качестве аргументов и статус завершения функции становится статусом завершения этой подоболочки. Если эта функция не определена, то оболочка выводит сообщение об ошибке и возвращает статус завершения, равный 127.

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

Если это выполнение завершается неудачей из-за того, что файл не имеет исполняемого формата и не является каталогом, предполагается, что это - файл сценария оболочки shell script, т.е. файл, содержащий команды оболочки и оболочка создает новый экземпляр самой себя для его выполнения. Bash пытается определить, является ли файл текстовым или двоичным и не будет выполнять файлы, которые она определяет как двоичные. Эта подоболочка повторно инициализирует саму себя так, как если бы для обработки сценария была вызвана новая оболочка, за исключением того, что расположение команд, запомненных родительской оболочкой, сохраняются дочерней оболочкой (смотрите хэш ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ.

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

ОКРУЖАЮЩАЯ СРЕДА ВЫПОЛНЕНИЯ КОМАНД

Оболочка имеет окружающую среду execution environment, которая сдержит следующее:

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

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

  • Открытые файлы оболочки, а также любые изменения и дополнения, указанные в перенаправлениях на команду.
  • Текущий рабочий каталог.
  • Маска режима создания файла.
  • Переменные и функции оболочки, помеченные для экспорта, а также переменные, экспортированные для команды, передаются в окружающей среде.
  • Ловушки, обнаруженные оболочкой, сбрасываются до значений, унаследованных от родительской оболочки, а ловушки, проигнорированные оболочкой, игнорируются.

Команда, вызванная в этой отдельной окружающей среде, не может повлиять на среду выполнения оболочки.

Подоболочка subshell - это копия процесса оболочки.

Подстановка команд, команды, сгруппированные в круглые скобки и асинхронные команды вызываются в среде подоболочки, которая является дубликатом окружающей среды оболочки, за исключением того, что ловушки, перехваченные оболочкой, сбрасываются до значений, которые оболочка унаследовала от своего родительского элемента при вызове. Встроенные команды, которые вызываются как часть конвейера, за исключением, возможно, последнего элемента в зависимости от значения опции оболочки lastpipe, также выполняются в окружающей среде подоболочки. Изменения, внесенные в окружающую среду подоболочки, не могут повлиять на окружающую среду выполнения оболочки.

Когда оболочка находится в режиме posix, вложенные подоболочки, созданные для выполнения подстановок команд, наследуют значение опции -e от своей родительской оболочки. Когда оболочка не находится в режиме posix, то bash удаляет опцию -e в таких подоболочках. Смотрите описание опции оболочки inherit_errexit ниже, чтобы узнать, как управлять этим поведением, когда оболочка не находится в режиме posix.

Если за командой следует символ & и управление заданием не активировано, то стандартным вводом по умолчанию для команды является пустой файл /dev/null. В противном случае вызываемая команда наследует файловые дескрипторы вызывающей оболочки, измененные при перенаправлении.

СРЕДА ОКРУЖЕНИЯ

При вызове программы ей выдается массив строк, называемый окружающей средой environment. Это список пар name-value в формате name=value.

Оболочка предоставляет несколько способов управления средой. При вызове оболочка сканирует свою собственную окружающую среду и создает параметр для каждого найденного названия, автоматически помечая его для использования в дочерних процессах. Выполняемые команды наследуют окружающую среду. Команды export, declare -x и unset изменяют окружающая среду, добавляя или удаляя параметры и функции. Если значение параметра в окружающей среде изменяется, то новое значение автоматически становится частью окружающей среды, заменяя старое. Окружающая среда, наследуемая любой выполняемой командой, состоит из начальной окружающей среды оболочки, значения которой могут быть изменены в оболочке, за вычетом любых пар, удаленных командами unset или export -n, а также любых дополнений, сделанных с помощью команд export и declare -x.

Если какие-либо присвоения параметров, как описано выше в разделе ПАРАМЕТРЫ, отображаются перед простой командой simple command, то присвоения переменных являются частью окружающей среды этой команды до тех пор, пока она выполняется. Эти команды присваивания влияют только на окружающую среду, которую видит эта команда. Если эти назначения предшествуют вызову функции оболочки, то переменные являются локальными для этой функции и экспортируются в дочерние элементы этой функции.

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

Когда bash вызывает внешнюю команду, тогда переменной _ присваивается значение полного пути к команде и передается этой команде в ее окружающей среде.

КОД ЗАВЕРШЕНИЯ

Статус выхода выполняемой команды - это значение, возвращаемое системным вызовом waitpid или эквивалентной функцией. Статусы выхода (завершения) находятся в диапазоне от 0 до 255, хотя, как объясняется ниже, оболочка может специально использовать значения выше 125. Статусы завершения работы встроенных команд оболочки и составных команд также ограничены этим диапазоном. При определенных обстоятельствах оболочка будет использовать специальные значения для указания конкретных режимов ошибок.

Для целей оболочки, команда, которая завершается с нулевым статусом завершения, была выполнена успешно. Таким образом, когда нулевой статус выхода указывает на успех, ненулевой статус выхода указывает на неудачу.

Когда команда завершается по фатальному сигналу N, то bash использует значение 128+N в качестве статуса завершения.

Если команда не найдена, то дочерний процесс, созданный для ее выполнения, возвращает статус 127. Если команда найдена, но не может быть выполнена, возвращается статус 126.

Если команда не выполняется из-за ошибки во время расширения или перенаправления, то статус завершения больше нуля.

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

Статус завершения последней команды доступен (может быть прочитан) в специальном параметре $?.

Сама Bash возвращает статус завершения последней выполненной команды, если только не возникает синтаксическая ошибка, и в этом случае, она завершается с ненулевым значением. Смотрите также встроенную команду exit ниже.

СИГНАЛЫ

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

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

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

По умолчанию оболочка завершает работу после получения команды SIGHUP. Перед выходом интерактивная оболочка повторно отправляет команду SIGHUP всем заданиям, запущенным или остановленным. Оболочка отправляет SIGCONT остановленным заданиям, чтобы гарантировать, что они получат SIGHUP (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЯМИ ниже для получения дополнительной информации о запущенных и остановленных заданиях). Чтобы оболочка не отправляла сигнал конкретному заданию, удалите его из таблицы заданий с помощью встроенной команды disown (смотрите ниже раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ) или отметьте его так, чтобы он не получал SIGHUP с помощью disown -h.

Если опция оболочки huponexit была установлена с помощью команды shopt, то bash отправляет сообщение SIGHUP всем заданиям при завершении входа интерактивной оболочки.

Если bash ожидает завершения команды и получает сигнал, для которого был установлена ловушка, то она не будет выполнять ловушку до тех пор, пока команда не завершится. Если bash ожидает асинхронной команды с помощью встроенной команды wait и получает сигнал, для которого была установлена ловушка, то встроенная команда wait немедленно вернется со статусом завершения, превышающим 128, сразу после чего оболочка выполнит ловушку.

Когда управление заданиями не включено и bash ожидает завершения команды переднего плана, тогда оболочка получает сигналы, генерируемые клавиатурой, такие как SIGINT (обычно генерируемые ^C), которые пользователи обычно намереваются отправить этой команде. Это происходит потому, что оболочка и команда находятся в той же группе процессов, что и терминал и ^C отправляет SIGINT всем процессам в этой группе процессов. Поскольку bash по умолчанию не включает управление заданиями, когда оболочка не является интерактивной, то этот сценарий наиболее распространен в неинтерактивных оболочках.

Когда управление заданиями включено и bash ожидает завершения команды переднего плана, то оболочка не получает сигналы, генерируемые клавиатурой, поскольку она не находится в той же группе процессов, что и терминал. Этот сценарий наиболее распространен в интерактивных оболочках, где bash пытается включить управление заданиями по умолчанию. Смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЯМИ ниже для получения дополнительной информации о группах процессов.

Когда управление заданиями не включено и bash получает сигнал SIGINT во время ожидания команды переднего плана, то она ожидает завершения выполнения этой команды переднего плана, а затем решает, что делать с сигналом SIGINT:

1.
Если команда завершается из-за сигнала SIGINT, то bash делает вывод, что пользователь намеревался также отправить SIGINT в оболочку и выполняет действия с SIGINT (например, запустив ловушку SIGINT, выйдя из неинтерактивной оболочки или вернувшись на верхний уровень для чтения новой команды).
2.
Если команда не завершается по сигналу SIGINT, то программа сама обрабатывает сигнал SIGINT и не рассматривает этот сигнал как фатальный. В этом случае bash также не рассматривает сигнал SIGINT как фатальный, а вместо этого предполагает, что сигнал SIGINT использовался как часть нормальной работы программы (например, редактор emacs использует его для отмены команд редактирования) или отвергнутый намеренно. Однако, bash, для обеспечения совместимости, запустит любой перехватчик, установленный для сигнала SIGINT, как это осуществляется применительно к любому другому перехватываемому сигналу, который она получает, ожидая завершения команды интерактивного режима.

Когда включено управление заданиями, тогда bash не получает сигналы, генерируемые клавиатурой, такие как SIGINT, пока она ожидает команды переднего плана. Интерактивная оболочка не обращает внимания на сигнал SIGINT, даже если в результате команда переднего плана завершается, за исключением указания её статуса завершения. Если оболочка не является интерактивной, а команда переднего плана завершается из-за сигнала SIGINT, то bash делает вид, что она сама получила SIGINT (сценарий 1 выше), для обеспечения совместимости.

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

Управление заданиями Job control означает возможность выборочно останавливать (приостанавливать, suspend) выполнение процессов и продолжать (resume) их выполнение позже. Пользователь обычно использует это средство с помощью интерактивного интерфейса, предоставляемого, совместно, драйвером терминала ядра операционной системы и bash.

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

[1] 25647

это указывает, что данное задание имеет номер задания 1 и что идентификатор последнего процесса в конвейере, связанного с этим заданием, равен 25647. Все процессы в одном конвейере являются участниками одного задания. Bash использует абстракцию job в качестве основы для управления заданиями.

Чтобы упростить реализацию пользовательского интерфейса для управления заданиями, у каждого процесса есть идентификатор группы процессов process group ID и операционная система поддерживает понятие текущего идентификатора группы терминальных процессов current terminal process group ID. Этот идентификатор группы терминальных процессов связан с управляющим терминалом controlling terminal.

Процессы, имеющие одинаковый идентификатор группы процессов, считаются частью одной и той же группы процессов process group. Члены группы процессов переднего плана foreground (процессы, идентификатор группы процессов которых равен текущему идентификатору группы процессов терминала) получают сигналы, генерируемые клавиатурой, такие как SIGINT. Процессы в группе процессов переднего плана называются процессами переднего плана foreground . Процессами фонового Backgroundуровня являются процессы, идентификатор группы процессов которых отличается от идентификатора управляющего терминала; такие процессы невосприимчивы к сигналам, генерируемым клавиатурой. Только процессам переднего плана разрешено считывать данные из/или, если пользователь укажет это с помощью “stty tostop”, записи на управляющий терминал. Система отправляет сигнал SIGTTIN (SIGTTOU) фоновым процессам, которые пытаются выполнить чтение или запись “tostop” с терминала, который, если его не перехватят, приостанавливает процесс.

Если операционная система, в которой запущена bash, поддерживает управление заданиями, то bash содержит средства для его использования. Ввод символа приостановить suspend (обычно ^Z, Control-Z) во время выполнения процесса останавливает этот процесс и возвращает управление bash. Ввод символа отложенная приостановка delayed suspend (обычно ^Y, Control-Y) приводит к остановке процесса при попытке считывания входных данных с терминала и возвращает управление bash. Затем пользователь управляет состоянием этого задания, используя команду bg, чтобы продолжить его в фоновом режиме, команду fg, чтобы продолжить его на переднем плане, или команду kill, чтобы завершить его. Символ приостановки вступает в силу немедленно и имеет дополнительный побочный эффект, заключающийся в отбрасывании всех ожидающих вывода данных и изображений текста. Чтобы принудительно остановить фоновый процесс или остановить процесс, не связанный с текущей сессией терминала, отправьте ему сигнал SIGSTOP с помощью команды kill.

Существует несколько способов указать задание оболочке. Символ % указывает на спецификацию задания (jobspec).

Номер задания n может быть обозначено как %n. Для обозначения задания также может использоваться префикс названия, используемого для его запуска, или подстрока, которая отображается в его командной строке. Например, %ce относится к заданию, название команды которого начинается с ce. С другой стороны, использование %?ce относится к любому заданию, содержащему строку ce в командной строке. Если префикс или подстрока совпадают с несколькими заданиями, то bash сообщает об ошибке.

Символы %% и %+ указывают на то, как оболочка определяет текущее задание current job. Один символ % (без дополнительных других символов) относится к текущему заданию. Символы %- относится к предыдущему заданию previous job. Когда задание запускается в фоновом режиме, оно останавливается, находясь на переднем плане, или возобновляется в фоновом режиме, то оно становится текущим заданием. Задание, которое было текущим, становится предыдущим заданием. Когда текущее задание завершается, то текущим заданием становится предыдущее задание. Если существует только одно задание, для обозначения этого задания можно использовать как %+, так и %-. В выходных данных, относящихся к заданиям (например, в выходных данных команды jobs), текущее задание всегда помечается символом +, а предыдущее задание - символом -.

Простое присвоение названия заданию может быть использовано для того, чтобы вывести его на передний план: %1 - это синоним “fg %1”, перемещения задание 1 с заднего плана на передний. Аналогично, “%1 &” возобновляет работу задания 1 в фоновом режиме, что эквивалентно “bg %1”.

Оболочка немедленно узнает об этом всякий раз, когда задание меняет свое состояние. Обычно bash ожидает, пока не появится запрос на вывод, прежде чем уведомлять пользователя об изменениях в статусе задания, чтобы не прерывать другие выходные данные, хотя оболочка будет уведомлять об изменениях в статусе задания после завершения команды переднего плана в списке, перед выполнением следующей команды в списке. Если опция -b для встроенной команды set включена, то bash немедленно сообщает об изменениях статуса задания. Bash выполняет любую проверку на SIGCHLD для каждого дочернего элемента, который завершается.

Когда задание завершается и bash уведомляет пользователя об этом, то bash удаляет задание из таблицы. Оно не появится в выходных данных задания jobs, но в ожидании wait оболочка сообщит о своем статусе завершения, если в качестве аргумента будет указан идентификатор процесса, связанный с заданием. Когда таблица пуста, номера заданий начинаются с 1.

Если пользователь попытается выйти из bash во время остановки заданий (или, если опция оболочки checkjobs была включена с помощью встроенной выполняющейся команды shopt, то оболочка выведет предупреждающее сообщение и, если опция checkjobs включена, то выведет список заданий и их статусы. Затем можно использовать команду jobs для проверки их статуса. Если пользователь немедленно снова попытается выйти, без промежуточной команды, то bash не выводит другое предупреждение и завершает все остановленные задания.

Когда оболочка ожидает задание или процесс, используя встроенную команду wait и управление заданием включено, то команда wait возвращается при изменении состояния задания. Опция -f заставляет команду wait ожидать завершения задания или процесса перед возвратом.

ПОДСКАЗКИ

При выполнении в интерактивном режиме bash отображает основное приглашение PS1, когда она готова прочитать команду и дополнительное приглашение PS2, когда требуется дополнительный ввод для завершения команды.

Bash проверяет значение переменной массива PROMPT_COMMAND непосредственно перед выводом каждого основного запроса. Если какие-либо элементы в PROMPT_COMMAND заданы и не равны нулю, то Bash выполняет каждое значение в таком порядке, как если бы оно было введено в командной строке. Bash отображает PS0 после считывания команды, но перед ее выполнением.

Оболочка Bash отображает PS4, как описано выше, перед отслеживанием каждой команды, когда включена опция -x.

Оболочка Bash позволяет настраивать строки PS0, PS1, PS2 и PS4, вставляя несколько специальных символов, экранированных обратной косой чертой, которые декодируются следующим образом:

Символ звонка в формате ASCII (07).
Дата в “Weekday Month Date” формате (например, “Tue May 26”).
Формат format передается как strftime(3), а результат вставляется в строку запроса; пустое значение format приводит к представлению времени, зависящему от локали. Фигурные скобки обязательны.
Экранирующий символ ASCII (033).
Название хоста вплоть до первого “.”.
Названия хоста.
Количество заданий, которыми в данный момент управляет оболочка.
Основное название терминального устройства оболочки (например, “ttys0”).
Новая строка.
Возврат каретки.
Название оболочки: основное название $0 (часть, следующая за последней косой чертой).
Текущее время в 24-часовом формате ЧЧ:ММ:СС.
Текущее время в 12-часовом формате ЧЧ:ММ:СС.
\@
Текущее время в 12-часовом формате до полудня/после полудня.
Текущее время в 24-часовом формате ЧЧ:ММ.
Имя текущего пользователя.
Версия bash (например, 2.00).
Выпуск bash, версия + уровень исправления (например, 2.00.0)
Значение переменной оболочки PWD ($PWD), где $HOME обозначается тильдой (используется значение переменной PROMPT_DIRTRIM).
Основное название $PWD, а $HOME сокращается тильдой.
\!
Исторический номер этой команды.
\#
Номер этой команды.
\$
Если эффективный идентификатор пользователя UID равен 0, то A #, в противном случае $.
Символ, соответствующий восьмеричному числу nnn.
\\
Обратная косая черта.
\[
Начало последовательности непечатаемых символов, которая может быть использована для встраивания последовательности управления терминалом в приглашение.
\]
Окончание последовательности непечатаемых символов.

Номер команды и номер истории команды обычно различаются: номер истории команды - это ее позиция в списке истории, который может включать команды, восстановленные из файла истории (смотрите раздел ИСТОРИЯ ниже), в то время как номер команды - это позиция в последовательности команд выполняемых во время текущего сеанса оболочки. После того, как строка расшифрована, она расширяется с помощью расширения параметров, подстановки команд, арифметического расширения и удаления кавычек, в зависимости от значения опции оболочки promptvars (смотрите описание команды shopt в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).. Это может иметь нежелательные побочные эффекты, если экранированные части строки представляются внутри командной строки или содержат символы, специальные для расширения слова.

БИБЛИОТЕКА READLINE

Это библиотека, которая обрабатывает вводимые данные при использовании интерактивной оболочки, если только при вызове оболочки не указана опция --noediting. Редактирование строк также используется при использовании опции -e для встроенной команды read. По умолчанию команды редактирования строк аналогичны командам emacs; также доступен интерфейс редактирования строк в стиле vi. Редактирование строк можно включить в любое время, используя опции -o emacs или -o vi для встроенной команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Чтобы отключить редактирование строк после запуска оболочки, используйте опции +o emacs или +o vi для встроенной команды set.

Формат библиотеки Readline

В этом подразделе используются концепции редактирования в стиле редактора Emacs и его обозначения для нажатия клавиш. Управляющие клавиши обозначаются C-key, например, C-n означает Control-N. Аналогично, клавиша meta обозначаются M-key, поэтому M-x означает Мета-X. Мета-клавиша часто обозначается “Alt” или “Option”.

На клавиатурах без клавиши Meta M-x означает ESC x, т.е. нажать и отпустить клавишу Escape, затем последовательно нажать и отпустить клавишу x. Таким образом, ESC становится префиксом meta prefix. Комбинация M-C-x означает ESC Control-x: нажать и отпустить клавишу Escape, затем нажать и удерживать клавишу Control, одновременно нажимая клавишу x, затем отпустить обе клавиши.

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

Если ваша клавиша Meta создает последовательность клавиш с мета-префиксом ESC, то вы можете настроить привязки клавиш M-key, которые вы указываете (смотрите подраздел Привязки клавиш библиотеки Readline ниже), аналогично, установив переменную force-meta-prefix.

Командам библиотеки Readline могут присваиваться числовые значения аргументов arguments, которые обычно используются для подсчета повторений. Однако иногда значение имеет знак аргумента. Передача отрицательного аргумента команде, которая действует в прямом направлении (например, kill-line) заставляет эту команду действовать в обратном направлении. Ниже приведены команды, поведение которых с аргументами отличается от этого.

Точка point - это текущее положение курсора, а метка mark относится к сохраненному положению курсора. Текст между точкой и меткой называется область region. В библиотеке Readline есть концепция активной области active region: когда область активна, тогда readline повторно отображает область, используя значение переменной active-region-start-color. Переменная enable-active-region это включает и выключает. Несколько команд делают область активной; они приведены ниже.

Когда команда описывается как удаляющая текст killing, то удаленный текст сохраняется для возможного использования в будущем (при "выдергивании" yanking). Уничтоженный (удалённый) текст сохраняется в кольце удаления kill ring. При последовательном удалении удаленный текст объединяется в один блок, который можно удалить за один раз. Команды, которые не удаляют текст, разделяют фрагменты текста в кольце удаления.

Инициализация библиотеки Readline

Библиотека Readline настраивается путем ввода команд в файл инициализации (файл inputrc). Название этого файла берется из значения переменной оболочки INPUTRC. Если эта переменная не задана, то по умолчанию используется ~/.inputrc. Если этот файл не существует или не может быть прочитан, то readline выполняет поиск /etc/inputrc. Когда запускается программа, использующая библиотеку readline, тогда readline считывает файл инициализации и устанавливает найденные в нем привязки клавиш и переменные, прежде чем считывать любой пользовательский ввод.

В файле inputrc разрешено использовать только несколько основных конструкций. Пустые строки игнорируются. Строки, начинающиеся с #, являются комментариями. Строки, начинающиеся с $, обозначают условные конструкции. Остальные строки обозначают привязки клавиш и настройки переменных.

Привязки клавиш по умолчанию в этом разделе могут быть изменены с помощью команд привязки клавиш в файле inputrc. Программы, использующие библиотеку readline, включая bash, могут добавлять свои собственные команды и привязки.

Например, размещение

M-Control-u: универсальный аргумент

или
C-Meta-u: универсальный аргумент

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

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

В дополнение к названиям команд, readline позволяет привязывать клавиши к строке, которая вставляется при нажатии клавиши (macro). Различие между макросом и командой заключается в том, что макрос заключен в одинарные или двойные кавычки.

Привязки клавиш библиотеки Readline

Синтаксис для управления привязками клавиш в файле inputrc прост. Все, что требуется, - это название команды или текст макроса и последовательность клавиш, к которой он должен быть привязан. Последовательность клавиш может быть указана одним из двух способов: 1) в виде символического названия клавиши, возможно, с префиксами Meta- или Control- 2) или в виде последовательности клавиш, состоящей из одного или нескольких символов, заключенных в двойные кавычки. Последовательность клавиш и название разделяются двоеточием. Между названием и двоеточием не должно быть пробелов.

При использовании формы keyname:function-name или macro, keyname - это название клавиши на английском языке. Например:


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

В приведенном выше примере C-u привязана к функции universal-argument, M-DEL привязана к функции backward-kill-word, а C-o привязана к запуску макроса, выраженного с правой стороны (то есть для вставки текста “> output” в строку).

Во второй форме, "keyseq":function-name или macro, keyseq отличается от приведенной выше keyname тем, что строки, обозначающие всю последовательность клавиш, могут быть указаны путем заключения последовательности в двойные кавычки. Можно использовать некоторые экранирующие клавиши в стиле GNU Emacs, как в следующем примере, но ни одно из символических названий не распознается.


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

В этом примере клавиша C-u снова привязана к функции universal-argument. Клавиша C-x C-r привязана к функции re-read-init-file, а ESC [ 1 1 ~ привязана к вставке текста “Function Key 1”.

Полный набор escape-последовательностей в стиле GNU Emacs, доступных при указании клавишных последовательностей, представлен следующим образом

Управляющий префикс.
Добавление мета-префикса или преобразование следующего символа в мета-символ, как описано ниже в подразделе Принудительный мета-префикс.
Экранирующий символ.
\\
Обратная косая черта.
\"
Буква ", двойная кавычка.
\'
Буква ', одиночная кавычка.

В дополнение к экранирующим последовательностям в стиле GNU Emacs доступен второй набор экранирующих символов с обратной косой чертой:

сигнал тревоги (сирена)
возврат на один символ
delete
новая страница
newline
возврат каретки
горизонтальная табуляция
вертикальная табуляция
Восьмиразрядный символ, значением которого является восьмеричное значение nnn (от одной до трех цифр).
Восьмибитный символ, значением которого является шестнадцатеричное значение HH (одна или две шестнадцатеричные цифры).

При вводе текста макроса необходимо использовать одинарные или двойные кавычки для указания определения макроса. Предполагается, что текст без кавычек является названием функции. Описанные выше экранирующие обратные косые черты раскрываются в теле макроса. Обратная косая черта заключает в кавычки любой другой символ в тексте макроса, включая " и '.

Bash отобразит или изменит текущие привязки клавиш readline с помощью встроенной команды bind. Опции -o emacs или -o vi для встроенной команды set (смотрите ниже раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ) изменяют режим редактирования во время интерактивного использования.

Переменные Readline

В Readline есть переменные, которые можно использовать для дальнейшей настройки её поведения. Переменная может быть задана в файле inputrc с помощью инструкции вида

set variable-name value

или с помощью встроенной команды bind (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

За исключением случаев, когда это указано, переменные readline могут принимать значения "Включено" On или "Выключено" Off (без учета регистра). Нераспознанные названия переменных игнорируются. Когда readline считывает значение переменной, пустые или нулевые значения, “on” (без учета регистра) и “1” эквивалентны On. Все остальные значения эквивалентны Off.

Команда bind -V выводит список текущих названий и значений переменных readline (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

Переменными и их значениями по умолчанию являются:

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

Конструкции условий Readline

В библиотеке Readline реализована функция, схожая по смыслу с функциями условной компиляции препроцессора Cи, которая позволяет выполнять привязку клавиш и настройки переменных в результате тестов. Доступны четыре директивы синтаксического анализа.

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


$if Bash # Процитировать текущее или предыдущее слово "\C-xq": "\eb\"\ef\"" $endif
Конструкция variable предоставляет простые тесты на равенство для переменных и значений для библиотеки readline. Допустимыми операторами сравнения являются =, == и !=. Название переменной должно быть отделено от оператора сравнения пробелом; оператор может быть отделен от значения справа пробелом. Могут быть проверены строковые и логические переменные. Логические переменные должны быть проверены на соответствие значениям "да" on и "нет" off.
$else
Команды в этой ветви директивы $if выполняются в случае сбоя теста.
$endif
Эта команда, как видно из предыдущего примера, завершает выполнение команды $if.
$include
Эта директива принимает в качестве аргумента одно название файла и считывает команды и привязки клавиш из этого файла. Например, следующая директива будет выглядеть следующим образом /etc/inputrc:

$include  /etc/inputrc

Поиск

Библиотека Readline предоставляет команды для поиска строк, содержащих указанную строку, в истории команд (смотрите ниже раздел ИСТОРИЯ). Существует два режима поиска: инкрементальный incremental и не инкрементальный non-incremental.

Инкрементальный поиск начинается до того, как пользователь закончит вводить строку поиска. По мере ввода каждого символа в строке поиска readline отображает следующую запись из истории, соответствующую введенной строке. Для инкрементального поиска требуется ровно столько символов, сколько необходимо для поиска нужной записи в истории. При использовании режима редактирования emacs введите C-r, чтобы выполнить поиск в истории в обратном направлении в поисках определенной строки. При вводе C-s выполняется поиск в истории в прямом (вперёд) направлении. Символы, присутствующие в значении переменной isearch-terminators, используются для завершения инкрементального поиска. Если этой переменной не было присвоено значение, то ESC и C-j завершают инкрементальный поиск. C-g прерывает инкрементальный поиск и восстанавливает исходную строку. Когда поиск завершается, запись журнала, содержащая строку поиска, становится текущей строкой.

Чтобы найти другие совпадающие записи в списке истории, введите C-r или C-s, соответственно. При этом выполняется поиск в истории в обратном или прямом направлениях в поисках следующей записи, соответствующей введенной строке поиска. Любая другая последовательность клавиш, связанная с командой терминала readline, завершает поиск и выполняет эту команду. Например, новая строка завершает поиск и принимает строку, тем самым выполняя команду из списка истории. Команда перемещения завершит поиск, сделает последнюю найденную строку текущей и начнет редактирование.

Readline запоминает последнюю строку инкрементального поиска. Если две строки C-r вводятся без каких-либо промежуточных символов, определяющих новую строку поиска, то readline использует любую запомненную строку поиска.

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

Названия команд Readline

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

В следующих описаниях "точка" point обозначает текущее положение курсора, а "метка" mark - положение курсора, сохраненное командой set-mark. Текст между точкой и меткой называется областью region. В Readline есть концепция активной области active region: когда область активна, тогда readline повторно отображает область, используя значение переменной active-region-start-color. Переменная readline enable-active-region включает и выключает эту переменную. Несколько команд устанавливают область в активное состояние; они описаны ниже.

Команды перемещения

Перейти к началу текущей строки. На некоторых клавиатурах это также может быть связано с клавишей Home.
Перейти к концу строки. На некоторых клавиатурах это также может быть связано с клавишей End.
Переместить символ вперед. На некоторых клавиатурах это также может быть связано с клавишей со стрелкой вправо.
Переместить символ назад. На некоторых клавиатурах это также может быть связано с клавишей со стрелкой влево.
Перейти к концу следующего слова. Слова состоят из буквенно-цифровых символов (букв и цифр).
Вернуться к началу текущего или предыдущего слова. Слова состоят из буквенно-цифровых символов (букв и цифр).
Перейти к концу следующего слова. Слова разделяются метасимволами, не заключенными в кавычки.
Вернуться к началу текущего или предыдущего слова. Слова разделяются метасимволами оболочки, не заключенными в кавычки.
Попытаться переместить точку в тот же столбец физического экрана в предыдущей строке физического экрана. Это не даст желаемого эффекта, если текущая строка readline занимает не более одной физической строки или если точка не превышает длину приглашения плюс ширину экрана.
Попытаться переместить точку в тот же столбец физического экрана в следующей строке физического экрана. Это не даст желаемого эффекта, если текущая строка readline занимает не более одной физической строки или если длина текущей строки readline не превышает длину приглашения плюс ширина экрана.
Очистить экран и, если возможно, буфер обратной прокрутки терминала, затем перечертить текущую строку, оставив текущую строку в верхней части экрана.
Очистить экран, затем переместить текущую строку, оставив ее в верхней части экрана. Используя числовой аргумент, обновить текущую строку, не очищая экран.
Обновить текущую строку.

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

Принимать строку независимо от того, где находится курсор. Если эта строка непустая, то добавить ее в список истории в соответствии с состоянием переменных HISTCONTROL и HISTIGNORE. Если строка является измененной строкой истории, то восстановить ее в исходном состоянии.
Извлекать предыдущую команду из списка истории, перемещаясь назад по списку. Это также может быть связано с клавишей со стрелкой вверх на некоторых клавиатурах.
Извлечь следующую команду из списка истории, продвигаясь по списку вперед. Это также может быть связано с клавишей со стрелкой вниз на некоторых клавиатурах.
Перейти на первую строку в истории.
Перейти к концу истории ввода, т.е. к строке, которая вводится в данный момент.
Принимать текущую строку для выполнения, как если бы была введена новая строка и извлекать следующую строку относительно текущей строки из журнала для редактирования. Числовой аргумент, если он указан, указывает, какую запись журнала следует использовать вместо текущей строки.
Используя числовой аргумент, извлечь эту запись из списка истории и сделать ее текущей строкой. Когда аргумент не определён, тогда вернуться к первой записи в списке истории.
Искать в обратном направлении, начиная с текущей строки и двигаясь “up” по списку истории по мере необходимости. Это пошаговый поиск. Эта команда устанавливает область в соответствии с соответствующим текстом и активирует область.
Искать вперед, начиная с текущей строки и двигаясь “down” по списку истории по мере необходимости. Это пошаговый поиск. Эта команда устанавливает область в соответствии с соответствующим текстом и активирует область.
Искать назад по списку истории, начиная с текущей строки, используя неинкрементный поиск по строке, предоставленной пользователем. Строка поиска может совпадать с любым местом в строке истории.
Искать вперёд по списку истории, используя не инкрементальный поиск по строке, предоставленной пользователем. Строка поиска может совпадать с любым местом в строке истории.
Искать назад по списку истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска должна совпадать с началом строки истории. Это не инкрементальный поиск. Это может быть связано с нажатием клавиши Page Up key ("Открыть страницу") на некоторых клавиатурах.
Искать по списку истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска должна совпадать с началом строки истории. Это не инкрементальный поиск. На некоторых клавиатурах это может быть связано с нажатием клавиши Page Down ("Перелистывание страницы вниз").
Искать в списке истории назад в поисках последовательности символов между началом текущей строки и точкой. Строка поиска может совпадать с любым местом в строке истории. Это не инкрементальный поиск.
Выполнить поиск вперед по истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска может совпадать с любым местом в строке истории. Это не инкрементальный поиск.
Вставить первый аргумент предыдущей команды (обычно второе слово в предыдущей строке) в точку. С аргументом n вставьте n-е слово из предыдущей команды (слова в предыдущей команде начинаются со слова 0). Отрицательный аргумент вставляет n-е слово из конца предыдущей команды. Как только аргумент n вычислен, для извлечения n-го слова используются средства расширения истории, как если бы “!n” расширение истории было задано заранее.
Вставить последний аргумент в предыдущую команду (последнее слово предыдущей записи в истории). С числовым аргументом ведёт себя точно так же, как с yank-nth-arg. Последовательные вызовы yank-last-arg перемещают назад по списку истории, по очереди вставляя последнее слово (или слово, указанное аргументом для первого вызова) из каждой строки. Любой числовой аргумент, передаваемый этим последовательным вызовам, определяет направление перемещения по истории. Отрицательный аргумент переключает направление перемещения по истории (назад или вперед). При этом используются средства расширения истории для извлечения последнего слова, как если бы “!$” расширение истории было задано заранее.
Расширение слов выполнялось в оболочке. При этом выполняется расширение псевдонима и истории, используются кавычки $'string' и $"string", расширение тильды, расширение параметров и переменных, арифметическое расширение, замена команд и процессов, разделение слов и удаление кавычек. Явный аргумент запрещает замену команд и процессов. Описание расширения истории смотрите в разделе РАСШИРЕНИЕ ИСТОРИИ ниже.
Выполнить расширение истории в текущей строке. Описание расширения истории смотрите в разделе РАСШИРЕНИЕ ИСТОРИИ ниже.
Выполнить расширение истории в текущей строке и вставить пробел. Описание расширения истории смотрите в разделе РАСШИРЕНИЕ ИСТОРИИ ниже.
Выполнить расширение псевдонима в текущей строке. Описание расширения псевдонима приведено в разделе ПСЕВДОНИМЫ выше.
Выполнить расширение истории и псевдонима в текущей строке.
Синоним для yank-last-arg.
Вызвать редактор в текущей командной строке и выполнить результат в виде команд оболочки. Bash пытается вызвать $VISUAL, $EDITOR и emacs в качестве редактора в указанном порядке.

Команды изменения текста

Символ, обозначающий конец файла, заданный, например, с помощью stty(1). Если этот символ считывается, когда в строке нет символов, а точка находится в начале строки, то readline интерпретирует его как конец ввода и возвращает EOF.
Удалить символ в точке. Если эта функция привязана к тому же символу, что и символ tty EOF, как это обычно бывает с C-d, то смотрите выше, чтобы узнать об эффектах. Это также может быть связано с клавишей Delete на некоторых клавиатурах.
Удалить символ, находящийся за курсором. Если задан числовой аргумент, то сохранить удаленный текст в кольце удаления.
Удалить символ под курсором, если только курсор не находится в конце строки, в этом случае символ, расположенный за курсором, будет удален.
Добавить следующий введенный символ в строку буквально. Вот как, например, вставлять такие символы, как C-q.
Вставить символ табуляции.
Вставить введенный символ.
Эта функция предназначена для привязки к “bracketed paste” escape-последовательности, отправляемой некоторыми терминалами и такая привязка назначается по умолчанию. Это позволяет readline вставлять текст как единое целое, не обрабатывая каждый символ так, как если бы он был прочитан с клавиатуры. Вставленные символы вставляются так, как если бы каждый из них был привязан к самостоятельной вставке self-insert вместо выполнения каких-либо команд редактирования.
Вставка в квадратных скобках устанавливает область в соответствии со вставленным текстом и активирует эту область.
Перетащить символ перед точкой вперед по символу в точке, также перемещая точку вперед. Если точка находится в конце строки, то это перемещает два символа перед точкой. Отрицательные аргументы не действуют.
Перетащить слово перед точкой за слово после точки, перемещая точку также за это слово. Если точка находится в конце строки, то это перемещает последние два слова в строке.
Перетащить слово перед точкой за слово после точки, перемещая точку также и за это слово. Если точка вставки находится в конце строки, это перемещает последние два слова в строке. Границы слов такие же, как у shell-forward-word и shell-backward-word.
Ввести текущее (или следующее) слово в верхнем регистре. Если аргумент отрицательный, то ввести предыдущее слово в верхнем регистре, но не перемещать точку.
Ввести текущее (или следующее) слово в нижнем регистре. Если аргумент отрицательный, то ввести предыдущее слово в нижнем регистре, но не перемещать точку.
Указать текущее (или следующее) слово с заглавной буквы. При отрицательном аргументе указать предыдущее слово с заглавной буквы, но не перемещать точку.
Переключить режим перезаписи. При явном положительном числовом аргументе переключится в режим перезаписи. При явном отрицательном числовом аргументе переключится в режим вставки. Эта команда влияет только на режим emacs; В режиме vi перезапись выполняется по-другому. Каждый вызов readline() начинается в режиме вставки.
В режиме перезаписи символы, связанные с self-insert, заменяют текст в точке, а не сдвигают текст вправо. Символы, связанные с backward-delete-char, заменяют символ перед точкой на пробел. По умолчанию эта команда не привязана, но может быть привязана к клавише "Insert" на некоторых клавиатурах.

Уничтожение и выдёргивание

Уничтожить текст от точки до конца текущей строки. Используя числовой аргумент с отрицательным значением, уничтожить текст в обратном направлении от курсора к началу строки.
Уничтожить в обратном порядке, с самого начала текущей строки. С отрицательным числовым аргументом уничтожить вперед от курсора к концу строки.
Уничтожить в обратном порядке от точки к началу строки, сохраняя уничтоженный текст в кольце удаления.
Уничтожить все символы в текущей строке, независимо от того, где находится точка.
Удалить от точки до конца текущего слова или, если между словами, то до конца следующего слова. Границы слов совпадают с теми, которые используются в forward-word.
Удалить слово, стоящее за точкой. Границы слов совпадают с теми, которые используются в backward-word.
Удалить от точки до конца текущего слова или, если между словами, то до конца следующего слова. Границы слов совпадают с теми, которые используются в shell-forward-word.
Удалить слово, стоящее за точкой. Границы слов совпадают с теми, которые используются в shell-backward-word.
Уничтожить слово за точкой, используя пробел в качестве границы слова, сохранив уничтоженный текст в кольце удаления.
Удалить слово за точкой, используя пробел и символ косой черты в качестве границ слова, сохранив уничтоженный текст в кольце удаления.
Удалить все пробелы и знаки табуляции вокруг точки.
Удалить текст в текущей области.
Скопировать текст из этой области в буфер удаления, чтобы его можно было немедленно извлечь.
Скопировать слово перед точкой в буфер удаления. Границы слов совпадают с backward-word.
Скопировать слово, следующее за точкой, в буфер удаления. Границы слов такие же, как и в forward-word.
Извлечь верхнюю часть из кольца удалённых в буфере около точки.
Повернуть кольцо удалённых и извлечь новый верх. Работает только после yank или yank-pop.

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

Добавить эту цифру к уже имеющемуся аргументу или определить новый аргумент. M - определяет отрицательный аргумент.
Это еще один способ указать аргумент. Если за командой universal-argument следует одна или несколько цифр, с необязательным начальным знаком минус, то эти цифры определяют аргумент. Если за командой universal-argument следуют цифры, то выполнение снова заканчивается числовым аргументом, иначе игнорируется. В качестве специального случая, если за этой командой сразу следует символ, который не является ни цифрой, ни знаком минус, то количество аргументов для следующей команды умножается на четыре. Изначально количество аргументов равно единице, поэтому при выполнении этой функции в первый раз количество аргументов увеличивается на четыре, во второй раз количество аргументов увеличивается до шестнадцати и так далее.

Завершение

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

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

Начать сохранять символы, введенные в текущий макрос клавиатуры.
Прекратить сохранять символы, введенные в текущий макрос клавиатуры и сохранить определение.
Повторно выполнить последний определенный макрос клавиатуры, сделав так, чтобы символы в макросе отображались так, как если бы они были набраны с клавиатуры.
Вывести последний определенный макрос клавиатуры в формате, подходящем для файла inputrc.

Разное

Прочитать содержимое файла inputrc и включить в него все найденные там привязки или назначения переменных.
Прервать текущую команду редактирования и выдать сигнал звонка на терминал (в соответствии с настройкой bell-style).
Если измененный символ x имеет верхний регистр, то выполнить команду, привязанную к соответствующему измененному символу нижнего регистра. Поведение не определено, если x уже имеет нижний регистр.
Преобразовать следующий введенный символ. ESC f, эквивалентно Meta-f.
Пошаговая отмена, запомненного отдельно для каждой строки.
Отменить все изменения, внесенные в эту строку. Это похоже на выполнение команды undo необходимое количество раз, чтобы вернуть строку в исходное состояние.
Выполнить расширение тильдой текущего слова.
Установить метку в точку. Если указан числовой аргумент, то установить метку в это положение.
Заменить точку на метку. Установить текущее положение курсора на сохраненное, затем установить метку на прежнее положение курсора.
Прочитать символ и переместите указатель на следующее его появление. Отрицательный аргумент выполняет поиск предыдущих появлений.
Прочитать символ и переместить указатель на предыдущее его использование. Отрицательный аргумент выполняет поиск последующих появлений.
Прочитать достаточное количество символов, чтобы использовать последовательность из нескольких клавиш, например, определенную для таких клавиш, как Home и End. Последовательности CSI начинаются с индикатора контрольной последовательности (CSI), обычно ESC [. Если эта последовательность привязана к “\e[”, клавишам, создающим последовательности CSI, то не действуют, если они явно не привязаны к команде readline, вместо того чтобы вставлять случайные символы в буфер редактирования. По умолчанию это не привязано, но обычно привязывается к ESC [.
Если без числового аргумента, то вставить значение переменной readline comment-begin в начало текущей строки. Если указан числовой аргумент, то эта команда действует как переключатель: если символы в начале строки не соответствуют значению comment-begin, то вставить значение; в противном случае удалить символы в comment-begin из начала строки. В любом случае строка принимается так, как если бы была введена новая строка. Значение по умолчанию для comment-begin приводит к тому, что эта команда преобразует текущую строку в комментарий оболочки. Если числовой аргумент приводит к удалению символа комментария, то строка будет выполнена оболочкой.
Выполнить исправление орфографии в текущем слове, указав его в качестве каталога или названия файла, таким же образом, как опции cdspell оболочки. Границы слов совпадают с границами, используемыми в опции shell-forward-word.
Рассматривать слово перед точкой как шаблон для расширения названия пути с неявным добавлением звездочки, затем использовать этот шаблон для создания списка совпадающих названий файлов для возможных завершений.
Использовать слово перед точкой как шаблон для расширения названия пути и вставить список совпадающих названий файлов, заменив это слово. Если указан числовой аргумент, то добавить символ * перед расширением названия пути.
Отобразить список расширений, которые были бы сгенерированы с помощью glob-expand-word и повторно отобразить строку. Если указан числовой аргумент, то добавить * перед расширением названия пути.
Вывести все функции и их привязки к клавишам в поток вывода readline. Если указан числовой аргумент, то выходные данные форматируются таким образом, чтобы их можно сделать частью файла inputrc.
Вывести все настраиваемые переменные readline и их значения в поток вывода readline. Если указан числовой аргумент, то выходные данные форматируются таким образом, чтобы их можно сделать частью файла inputrc.
Вывести все последовательности клавиш readline, привязанные к макросам и строки, в которые они выводят в выходной поток readline. Если указан числовой аргумент, то выходные данные форматируются таким образом, чтобы их можно сделать частью файла inputrc.
Прочитать название команды с возможностью привязки readline из входных данных и выполнить функцию, к которой она привязана, как если бы последовательность клавиш, к которой она была привязана, была указана во входных данных. Если эта функция снабжена числовым аргументом, то этот аргумент будет передан функции, которая выполняется.
Вывести информацию о данной версии оболочки bash.

Завершение программ

Когда пользователь пытается выполнить ввод слова для команды или аргумента команды, для которой была определена спецификация завершения compspec с использованием встроенной команды complete (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), то readline вызывает программируемые средства завершения.

Во-первых, bash определяет название команды. Если для этой команды была определена спецификация завершения, то спецификация завершения используется для создания списка возможных завершений для слова. Если командным словом является пустая строка (попытка завершения в начале пустой строки), то bash использует любую спецификацию завершения, определенную опцией -E для complete. Опция -I для complete указывает на то, что командное слово является первым в строке словом, не подлежащим присвоению или словом после разделителя команд, такого как ; или |. Обычно это указывает на завершение названия команды.

Если командным словом является полное название пути, то bash сначала выполняет поиск спецификации завершения для полного названия пути. Если для полного названия пути нет спецификации завершения, то bash пытается найти спецификацию завершения для части, следующей за последней косой чертой. Если эти поиски не приводят к получению спецификации завершения или если для командного слова нет спецификации завершения, то bash использует любую спецификацию завершения, определенную опцией -D для complete по умолчанию. Если спецификация завершения по умолчанию отсутствует, то bash выполняет расширение псевдонима для командного слова в качестве последнего средства и пытается найти спецификацию завершения для командного слова, полученного в результате любого успешного расширения.

Если спецификация завершения не найдена, то bash выполняет завершение по умолчанию, как описано выше в подразделе Завершение. В противном случае, как только спецификация завершения найдена, bash использует её для создания списка совпадающих слов.

Сначала bash выполняет действия actions, указанные в спецификации завершения. Это возвращает только совпадения, которые являются префиксами завершаемого слова. Когда для заполнения названия файла или каталога используется опция -f или -d, то bash использует переменную оболочки FIGNORE для фильтрации совпадений.

Далее, программируемое завершение генерирует совпадения, указанные с помощью шаблона расширения названия пути, предоставленного в качестве аргумента опции -G. Слова, сгенерированные с помощью шаблона, не обязательно должны совпадать с завершаемым словом. Bash использует переменную FIGNORE для фильтрации совпадений, но не использует переменную оболочки GLOBIGNORE.

Далее при завершении используется строка, указанная в качестве аргумента опции -W. Сначала строка разделяется с использованием символов в специальной переменной IFS в качестве разделителей. Это позволяет использовать кавычки оболочки внутри строки, чтобы обеспечить механизм для слов, содержащих метасимволы оболочки или символы в значении IFS. Затем каждое слово расширяется с помощью фигурных скобок, тильды, параметров и переменных, подстановки команд и арифметического расширения, как описано выше в разделе РАСШИРЕНИЯ. Результаты разбиваются по правилам, описанным выше в подразделе Разделение слов. Результаты расширения сопоставляются по префиксу с завершаемым словом, а совпадающие слова становятся возможными завершениями.

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

Сначала вызывается любая функция, указанная с помощью -F. Функция может использовать любые средства оболочки, включая описанные ниже встроенные команды compgen и compopt, для генерации совпадений. Она должна поместить возможные завершения в переменную массива COMPREPLY, по одному для каждого элемента массива.

Далее, любая команда, указанная с опцией -C, вызывается в среде, эквивалентной подстановке команд. В стандартном выводе должен быть список завершений, по одному на строку. При необходимости символ новой строки будет заменен обратной косой чертой. Они добавляются к набору возможных завершений.

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

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

Если ранее примененные действия не привели к каким-либо совпадениям, а опция -o dirnames была указана в complete при определении спецификации завершения, то bash попытается заполнить название каталога.

Если опция -o plusdirs была указана в complete при определении спецификации завершения, то bash попытается заполнить название каталога и добавит любые совпадения к набору возможных завершений.

По умолчанию, если найдена спецификация завершения, то всё, что она генерирует, возвращается в коде завершения в качестве полного набора возможных завершений. Завершения bash по умолчанию и readline по умолчанию для завершения названия файла отключены. Если опция -o bashdefault была указана в complete при определении спецификации завершения и спецификация завершения не генерирует совпадений, то bash выполняет попытку завершения по умолчанию. Если при выполнении спецификации завершения и, при попытке, при выполнении bash завершений по умолчанию не будет получено совпадений, а опция -o default была указана в complete при определении спецификации завершения, то программируемое завершение выполняет завершение readline по умолчанию.

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

Когда спецификация завершения указывает, что она хочет завершить название каталога, тогда программируемые функции завершения заставляют readline добавлять косую черту к завершенным названиям, которые являются символическими ссылками на каталоги, в зависимости от значения переменной mark-directories readline, независимо от установки переменной mark-symlinked-directories readline.

Существует некоторая поддержка динамического изменения завершений. Это наиболее полезно при использовании в сочетании с завершением по умолчанию, указанным с помощью complete -D. Функции оболочки, выполняемые как функции завершения, могут указывать, что завершение следует повторить, возвращая статус завершения, равный 124. Если функция оболочки возвращает значение 124 и изменяет спецификацию завершения, связанную с командой, для которой выполняется попытка завершения (указывается в качестве первого аргумента при выполнении функции), то программируемое завершение перезапускается с самого начала с попыткой найти новую спецификацию завершения для этой команды. Это может быть использовано для динамического создания набора завершений по мере попытки завершения, вместо того чтобы загружать их все сразу.

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


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

ИСТОРИЯ

Когда включена опция -o history для встроенной команды set, тогда оболочка предоставляет доступ к command history, т. е. к списку ранее введенных команд. Значение переменной HISTSIZE используется в качестве количества команд для сохранения в списке истории: оболочка сохраняет текст последних команд HISTSIZE (по умолчанию 500). Оболочка сохраняет каждую команду в списке истории до расширения параметров и переменных (смотрите раздел РАСШИРЕНИЯ выше), но после того, как выполняется расширение истории, в зависимости от значений переменных оболочки HISTIGNORE и HISTCONTROL.

При запуске bash инициализирует список истории, считывая записи истории из файла, название которого задается переменной HISTFILE (по умолчанию ~/.bash_history). этот файл называется history file. При необходимости файл истории обрезается, чтобы содержать не большего числа записей истории, указанного значением переменной HISTFILESIZE. Если значение HISTFILESIZE не задано или равно нулю, нечисловому значению или числовому значению, меньшему нуля, то файл истории не усекается.

При чтении файла истории строки, начинающиеся с символа комментария истории, за которым сразу следует цифра, интерпретируются как временные метки для следующей строки истории. Эти временные метки отображаются необязательно в зависимости от значения переменной HISTTIMEFORMAT. Временные метки истории, если они присутствуют,то разделяют записи истории, делая возможными многострочные записи.

Когда оболочка с включенной историей завершает работу, тогда bash копирует последние записи $HISTSIZE из списка истории в $HISTFILE. Если опция оболочки histappend включена (смотрите описание shopt в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), то bash добавляет записи в файл истории, в противном случае она перезаписывает файл истории. Если значение HISTFILE не задано или равно нулю, или если файл истории недоступен для записи, то история не сохраняется. После сохранения истории, bash обрезает файл истории, чтобы он содержал не более HISTFILESIZE строк, как описано выше.

Если задана переменная HISTTIMEFORMAT, то оболочка записывает информацию о временных метках, связанную с каждой записью истории, в файл истории, помечая их символом комментария истории, таким образом, временные метки сохраняются во всех сеансах оболочки. При этом используется символ комментария к истории, чтобы отличать временные метки от других строк истории. Как указано выше, при использовании HISTTIMEFORMAT временные метки разделяют многострочные записи истории.

Встроенная команда fc (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже) выведет на экран или отредактирует и повторно выполнит часть списка истории. Встроенная команда history может отображать или изменять список истории и управлять файлом истории. При использовании редактирования из командной строки в каждом режиме редактирования доступны команды поиска, которые предоставляют доступ к списку истории.

Оболочка позволяет управлять тем, какие команды сохраняются в списке истории. Переменные HISTCONTROL и HISTIGNORE используются для сохранения только подмножеств введенных команд. Если опция оболочки cmdhist включена, то оболочка пытается сохранить каждую строку многострочной команды в одной и той же записи истории, добавляя точки с запятой, где это необходимо, для сохранения синтаксической корректности. Опция оболочки lithist изменяет cmdhist, сохраняя команду со встроенными символами новой строки вместо точек с запятой. Смотрите описание встроенной команды shopt ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ для получения информации о настройке и отключении опций оболочки.

РАСШИРЕНИЕ ИСТОРИИ

Оболочка поддерживает функциональную возможность расширения истории, аналогичную возможности расширения истории в csh. В этом разделе описываются доступный синтаксис этой функциональной возможности.

Расширение истории включено по умолчанию для интерактивных оболочек и может быть отключено с помощью опции +H встроенной команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Не интерактивные оболочки по умолчанию не выполняют расширение истории, но это можно включить с помощью “set -H”.

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

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

Она состоит из двух частей. Первая заключается в определении того, какую запись в списке истории использовать при замене. Вторая - в выборе частей этой записи для включения в текущую.

Запись, выбранная из истории, называется событием event, а части этой записи, на которые воздействуют, называются словами words. Для манипулирования выбранными словами доступны различные модификаторы modifiers. Запись разбивается на слова таким же образом, как и при чтении входных данных, так, что несколько слов, разделенных метасимволами metacharacterи заключенные в кавычки, считаются одним словом. Обозначение события event designator выбирает событие, а дополнительное обозначение слова word designator выбирает слова из события, при этом также доступны различные дополнительные модификаторы modifiers для управления выбранными словами.

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

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

Некоторые символы запрещают расширение истории, если они находятся сразу после символа расширения истории, даже если он не заключен в кавычки; это - пробел, табуляция, новая строка, возврат каретки, = и другие метасимволы оболочки, определенные выше.

Существует специальная аббревиатура для обозначения подстановки, действующая, когда символ быстрой подстановки quick substitution (описанный выше как histchars) является первым символом в строке. Она выбирает предыдущую запись в списке истории, используя обозначение события, эквивалентное !! и заменяет в этой записи одну строку на другую. Это описано ниже в подразделе Обозначения событий. Это единственное расширение истории, которое не начинается с символа расширения истории.

Несколько опций оболочки, настраиваемых с помощью встроенной команды shopt, изменяют поведение расширения истории (смотрите описание встроенной команды shopt ниже). Если включена опция оболочки histverify и используется библиотека readline, то подстановки в истории не передаются немедленно в синтаксический анализатор оболочки. Вместо этого развернутая строка загружается в буфер редактирования readline для дальнейшей модификации. Если используется readline и включена опция оболочки histreedit, то неудачная подстановка истории перезагружается в буфер редактирования readline для исправления.

Опция -p для встроенной команды history показывает, что будет делать расширение истории перед её использованием. Опция -s для встроенной команды history добавит команды в конец списка истории без их фактического выполнения, чтобы они были доступны для последующего вызова.

Оболочка позволяет управлять различными символами, используемыми механизмом расширения истории (смотрите описание histchars выше в подразделе Переменные оболочки). Оболочка использует символ комментария к истории для обозначения временных меток истории при записи файла истории.

Указатели событий

Указатель события - это ссылка на запись в списке истории. Указатель события состоит из части слова, начинающейся с символа расширения истории и заканчивающейся указателем слова, если оно присутствует, или окончанием слова. Если ссылка не является абсолютной, то события отображаются относительно текущего положения в списке истории.

!
Запустить подстановку в истории, за исключением случаев, когда за ней следуют пробел blank, новая строка, возврат каретки, = или, когда опция оболочки extglob включена с помощью встроенной команды shopt, (.
!n
Обратиться к записи списка истории n.
!-n
Обратиться к текущей записи за вычетом n.
!!
Обратиться к предыдущей записи. Это синоним слова “!-1”.
!string
Обратится к самой последней команде, предшествующей текущей позиции в списке истории, начинающейся со строки string.
!?string[?]
Обратиться к самой последней команде, предшествующей текущей позиции в списке истории, содержащей строку string. Конечная буква ? может быть опущена, если за string сразу следует новая строка. Если string отсутствует, то используется строка из самого последнего поиска; если предыдущей строки поиска нет, то это ошибка.
^string1^string2^
Быстрая замена. Повторить предыдущую команду, заменив строку string1 на строку string2. Эквивалентно “!!:s^string1^string2^” (смотрите подраздел Модификаторы ниже).
!#
На данный момент введена вся командная строка целиком.

Указатели слова

Указатели слов используются для выбора нужных слов из события. Они необязательны; если указатель слова не указан, то в расширении истории используется всё событие целиком. Символ : отделяет спецификацию события от обозначения слова. Он может быть опущен, если укзатель слова начинается с ^, $, *, - или %. Слова нумеруются с начала строки, причем первое слово обозначается 0 (ноль). Слова вставляются в текущую строку через одинарные пробелы.

0 (zero)
Нулевое слово. Для оболочки это командное слово.
Слово n.
^
Первый аргумент: слово word 1.
$
Последнее слово. Обычно это последний аргумент, но он расширяется до нулевого слова, если в строке есть только одно слово.
%
Первое слово, совпадающее с самым последним “?string?” выполнять поиск, если строка поиска начинается с символа, который является частью слова. По умолчанию поиск начинается с конца каждой строки и продолжается до начала, поэтому первое найденное слово находится ближе всего к концу строки.
Диапазон слов; “-y” сократить “0-y”.
*
Все слова, кроме нулевого. Это синоним слова “1-$”. Использовать *, если в событии есть только одно слово, то это не является ошибкой; в этом случае оно расширяется до пустой строки.
Сокращение x-$.
Сокращает x-$ как x*, но опускает последнее слово. Если x отсутствует, то по умолчанию оно равно 0.

Если обозначение слова указано без указания события, то в качестве события используется предыдущая команда, эквивалентно !!.

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

После необязательного указателя слова, расширение может включать последовательность из одного или нескольких следующих модификаторов, каждому из которых предшествует “:”. Они изменяют или редактируют слово или фразы, выбранные из истории событий.

Удалить завершающий компонент названия пути, оставив только заголовок.
Удалить все начальные компоненты названия пути, оставив только концевые.
Удалить завершающий суффикс формы .xxx, оставив основное название.
Удалить все, кроме завершающего суффикса.
Вывести новую команду, но не выполнять ее.
Закавычивать замененные слова, но избегать дальнейших замен.
Замененные слова заключить в кавычки, как в q, но разбить на слова в пробелах blanksи в новой строке. Модификаторы q и x являются взаимоисключающими; при расширении используется последний из них.
Заменить старое old на новое new вместо первого символа в строке событий. В качестве разделителя вместо / может использоваться любой символ. Последний разделитель необязателен, если он является последним символом в строке событий. Разделители в old и new заключены в одиночную обратную косую черту. Если в new появляется символ &, то он заменяется на old. Одиночная обратная косая черта заключает & в кавычки. Если значение old равно нолю, то оно устанавливается равным последней замене old или, если предыдущие замены в истории не выполнялись, то последней замене string в поиске !?string[?]. Если значение new равно нолю, то все совпадающие значения old удаляются.
&
Повторить предыдущую замену.
Вызывает применение изменений ко всей строке событий. Используется в сочетании с “:s” (например, “:gs/old/new/”) или “:&”. При использовании с “:s”, вместо / можно использовать любой разделитель, а последний разделитель необязателен, если он является последним символом строки события. Символ a может использоваться как синоним символа g.
Применить следующие “s” или “&” изменить один раз каждое слово в строке событий.

ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ

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

: [arguments]
Никакого действия; команда не выполняет ничего, кроме расширения аргументов arguments и выполнения любых указанных перенаправлений. Статус возврата равен нулю.
. [-p path] filename [arguments]
Команда . (source) считывает и выполняет команды из файла с названием filename в текущей среде оболочки и возвращает статус завершения последней команды, выполненной из filename.
Если файл filename не содержит косой черты, то . выполняет поиск для него. Если указана опция -p, то . рассматривает path как список каталогов, разделенных двоеточием, в которых можно найти файл filename; в противном случае . использует записи в PATH, чтобы найти каталог, содержащий filename. Файл filename не обязательно должен быть исполняемым. Когда bash не находится в режиме posix, тогда она выполняет поиск в текущем каталоге, если filename не найден в PATH, то она не выполняет поиск в текущем каталоге, если указана опция -p. Если опция sourcepath для встроенной команды shopt отключена, то . не выполняет поиск в PATH.
Если указаны какие-либо аргументы arguments, то они становятся позиционными параметрами при выполнении файла с названием filename. В противном случае позиционные параметры остаются неизменными.
Если опция -T включена, то . наследует любую ловушку в DEBUG; если это не так, то любая строка ловушки DEBUG сохраняется и восстанавливается при вызове ., а . отключает ловушку DEBUG во время ее выполнения. Если значение -T не задано, а исходный файл изменяет ловушку DEBUG, то новое значение сохраняется после завершения .. Возвращаемый статус - это статус последней команды, выполненной из файла filename (0, если команды не выполняются) и ненулевое значение, если файл filename не найден или он не может быть прочитан.
Без аргументов или с опцией -p, команда alias выводит на стандартный вывод список псевдонимов в виде alias name=value . Когда будут предоставлены аргументы, то определяет псевдоним для каждого названия name, для которого задано значение value. Пробел в конце value приводит к проверке следующего слова на подстановку псевдонима, когда псевдоним раскрывается во время синтаксического анализа команды. Для каждого name в списке аргументов, для которого не указано value, выводит название и значение псевдонима для name. Команда aliasвозвращает значение true, если не задано значение name (без соответствующего =value), для которого не был определен псевдоним.
Возобновлять каждое приостановленное задание jobspec в фоновом режиме, как если бы оно было запущено с помощью &. Если jobspec отсутствует, то оболочка использует свое представление о текущем задании current job. bg jobspec возвращает 0, если не выполняется (когда управление заданиями отключено) или при запуске с включенным управлением заданиями, когда любое указанное в jobspec не было найдено или было запущено без управления заданиями.
Отображать текущие привязки клавиш и функций readline, привязывать последовательность клавиш к функции или макросу readline или к команде оболочки или устанавливать переменную readline. Каждый аргумент, не являющийся опцией, является привязкой клавиши или командой, как это было бы показано в файле инициализации readline .inputrc, но каждая привязка или команда должны передаваться как отдельный аргумент; например, *'"\C-x\C-r": re-read-init-file'. В следующих описаниях выходные данные, доступные для повторного чтения, форматируются в виде команд, которые отображаются в файле инициализации readline или которые предоставляются в качестве отдельных аргументов для команды bind. Параметры, если они указаны, имеют следующие значения:
Использовать keymap в качестве плана расположения клавиш, на который будут влиять последующие привязки. Допустимыми названиями для keymap являются emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command и вставка vi-insert. vi эквивалентно vi-command (vi-move также является синонимом); emacs эквивалентно emacs-standard.
Список всех функций readline.
Отображать названия функций и привязки readline таким образом, чтобы их можно было использовать в качестве аргумента для последующей команды bind или в файле инициализации readline. Если аргументы остаются после обработки опций, то bind обрабатывает их как названия команд readline и ограничивает вывод этими названиями.
Вывести список текущих названий функций и привязок readline. Если после обработки опций остаются аргументы, то bind обрабатывает их как названия команд readline и ограничивает вывод этими названиями.
Вывести на дисплей последовательности клавиш readline, привязанные к макросам и строки, которые они выводят, таким образом, чтобы их можно было использовать в качестве аргумента для последующей команды bind или в файле инициализации readline.
Вывести на дисплей последовательности клавиш readline, привязанные к макросам, и строки, которые они выводят.
Вывести на дисплей названия и значения переменных readline таким образом, чтобы их можно было использовать в качестве аргумента для последующей команды bind или в файле инициализации readline.
Показать текущие названия и значения переменных readline.
Прочитать привязки клавиш из файла filename.
Вывести на дисплей последовательности клавиш, которые вызывают наименования функций readline function.
Отменить привязку всех клавишных последовательностей, привязанных к именованным функциям readline function.
Удалить все текущие привязки для keyseq.
Приводит к тому, что команда оболочки shell-command будет выполняться всякий раз, когда вводится набор клавиш keyseq. Разделителем между keyseq и shell-command является либо пробел, либо двоеточие, за которым при необходимости следует пробел. Если разделителем является пробел, то команда shell-command должна быть заключена в двойные кавычки, а readline расширяет любой из своих специальных вариантов обратной косой чертой в shell-command перед сохранением. Если разделителем является двоеточие, то любые заключающие двойные кавычки необязательны, а readline не раскрывает командную строку перед ее сохранением. Поскольку все выражение привязки клавиши должно быть одним аргументом, то оно должно быть заключено в одинарные кавычки. Когда выполняется shell-command, командная строка устанавливает для переменной READLINE_LINE значение содержимого буфера строк readline, а для переменных READLINE_POINT и READLINE_MARK - текущее значение. местоположения точки вставки и сохраненной точки вставки (метки), соответственно. Оболочка присваивает любой числовой аргумент, указанный пользователем, в переменной READLINE_ARGUMENT. Если аргумент отсутствует, то эта переменная не задана. Если выполненная команда изменит значение любого из значений READLINE_LINE, READLINE_POINT или READLINE_MARK, то эти новые значения будут отражены в состоянии редактирования.
Вывести все последовательности клавиш, привязанные к командам оболочки, и связанные с ними команды в формате, который можно повторно использовать в качестве аргумента для последующей команды bind.

Возвращаемое значение равно 0, если только не указана нераспознанная опция или не произошла ошибка.

Выход из циклов for, while, until или select. Если указано значение n, то break завершает цикл, указанный n. n должно быть ≥ 1. Если n больше, чем количество замкнутых циклов, все замкнутые циклы завершаются. Возвращаемое значение равно 0, если только n не больше или не равно 1.
Выполнить указанную встроенную команду оболочки shell-builtin, передав ей аргументы arguments и вернуть статус завершения. Это полезно при определении функции, название которой совпадает с названием встроенной команды оболочки, сохраняя функциональность встроенной команды оболочки внутри функции. Встроенная команда cd обычно переопределяется таким образом. Возвращаемое значение равно false, если команда shell-builtin не является встроенной командой оболочки.
Возвращает контекст любого активного вызова подпрограммы (функции оболочки или сценария, выполняемого с помощью встроенных команд . или source).
Без expr, вызов caller отображает номер строки и название исходного файла текущего вызова подпрограммы. Если в качестве expr указано неотрицательное целое число, то caller отображает номер строки, название подпрограммы и исходный файл, соответствующие этой позиции в текущем стеке выполняемых вызовов. Эта дополнительная информация может быть использована, например, для вывода трассировки стека. Текущим кадром является кадр 0.
Возвращаемое значение равно 0, если только оболочка не выполняет вызов подпрограммы или выражение expr не соответствует допустимой позиции в стеке вызовов.
cd [-L] [-@] [dir]
Изменить текущий каталог на каталог dir. Если каталог dir не указан, то значение переменной оболочки HOME используется как dir. Если существует переменная CDPATH и dir не начинается с косой черты (/), то cd использует ее в качестве пути поиска: оболочка выполняет поиск по каждому названию каталога в CDPATH в поисках dir. Альтернативные названия каталогов в CDPATH разделяются двоеточием (:). Пустое название каталога в CDPATH совпадает с текущим каталогом, т.е., “.”.
Опция -P заставляет cd использовать физическую структуру каталогов, разрешая символьные ссылки при обходе dir и перед обработкой экземпляров .. в dir (смотрите также опцию -P для встроенной команды set).
Опция -L заставляет cd переходить по символическим ссылкам, разрешая ссылку после обработки экземпляров .. в dir. Если .. появляется в dir, то cd обрабатывает его, удаляя непосредственно предшествующий компонент названия пути из dir, возвращая косую черту или начало dir и проверяя, что часть dir, которую она обработала до этого момента, все еще является допустимым названием каталога после удаления компонента названия пути. Если это неверное название каталога, то cd возвращает ненулевой статус. Если не указано ни -L, ни -P, то cd ведет себя так, как если бы было указано -L.
Если для опции -e задано -P, и cd не удается успешно определить текущий рабочий каталог после успешной смены каталога, то она возвращает ненулевой статус.
В системах, которые это поддерживают, опция -@ представляет расширенные атрибуты, связанные с файлом, в виде каталога.
Аргумент - преобразуется в $OLDPWD перед попыткой изменения каталога.
Если cd использует непустое название каталога из CDPATH или если - является первым аргументом, а изменение каталога прошло успешно, то cd записывает абсолютный путь к новому рабочему каталогу в стандартный вывод.
Если изменение каталога прошло успешно, то cd присваивает переменной среды PWD значение нового названия каталога, а переменной среды OLDPWD присваивает значение текущего рабочего каталога перед изменением.
Возвращаемое значение равно true, если каталог был успешно изменен; в противном случае - false.
Встроенная команда command запускает command с аргументом args, подавляя обычный поиск функции оболочки для command. Выполняются только встроенные команды или команды, найденные в PATH с названием command. Если указана опция -p, то поиск command выполняется с использованием значения по умолчанию для PATH, которое гарантированно позволяет найти все стандартные утилиты.
Если указана опция -V или -v, то команда command выводит описание command. Опция -v отображает одно слово, обозначающее команду или название файла, используемые для вызова command; опция -V предоставляет более подробное описание.
Если указана опция -V или -v, то статус завершения равен нулю, если command была найдена и отличен от нуля, если нет. Если ни одна из опций не указана и произошла ошибка или command не может быть найдена, то статус завершения равен 127. В противном случае статус завершения встроенной команды command совпадает со статусом завершения command.
Создавать возможные совпадения по завершению для слова word в соответствии с опциями option, которые могут быть любыми опциями, принятыми для встроенной команды complete, за исключением опций -p, -r, -D, -E и -I и вывести совпадения на стандартный вывод.
Если указана опция -V, то команда compgen сохраняет созданные завершения в переменной индексированного массива varname вместо того, чтобы выводить их на стандартный вывод.
При использовании опций -F или -C различные переменные оболочки, заданные программируемыми средствами завершения, хотя и доступны, но не будут иметь полезных значений.
Совпадения будут созданы также, как если бы программируемый код завершения создал их непосредственно из спецификации завершения с теми же флагами. Если указано значение слова word, то будут выведены или сохранены только те завершения, которые соответствуют слову word.
Возвращаемое значение равно true, если только не была указана недопустимая опция или не было сгенерировано никаких критериев.

[-G globpat] [-W wordlist] [-F function] [-C command]
[-X filterpat] [-P prefix] [-S suffix] name [name ...]
Указать, как должны быть заполнены аргументы для каждого именования name.
Если указана опция -p или если не указаны никакие опции, или слова name, то распечатать существующие спецификации завершения таким образом, чтобы их можно было повторно использовать в качестве входных данных. Опция -r удаляет спецификацию завершения для каждого именования name или, если name не указаны, то все спецификации завершения.
Опция -D указывает на то, что другие предоставленные опции и действия должны применяться к “default” завершению команды; то есть к попытке завершения команды, для которой ранее не было определено завершение. Опция -E указывает, что другие предоставленные опции и действия должны применяться к “empty” завершению команды; то есть попытке завершения пустой строки. Опция -I указывает на то, что другие предоставленные опции и действия должны применяться к завершению начального слова в строке, не связанного с назначением, или после разделителя команд, такого как ; или |, которое обычно является завершением названия команды. Если указано несколько опций, то опция -D имеет приоритет перед опцией -E, а обе опции имеют приоритет перед опцией -I. Если указан какой-либо из аргументов -D, -E или -I, то любые другие аргументы name игнорируются; эти завершения применяются только к регистру, указанному опцией.
Описан процесс применения этих спецификаций завершения при попытке завершения слова above under Programmable Completion.
Другие опции, если они указаны, то имеют следующие значения. Аргументы опций -G, -W и -X (и, при необходимости, опций -P и -S) должны быть заключены в кавычки, чтобы защитить их от расширения до вызова встроенной команды complete.
Опция comp-option управляет несколькими аспектами поведения compspec, помимо простого создания дополнений. Опция comp-option может быть одной из:
Выполните остальные действия по умолчанию для оболочки bash, если compspec не генерирует совпадений.
Используйте заполнение названия файла по умолчанию readline, если спецификация завершения не генерирует совпадений.
Выполнить заполнение названия каталога, если спецификация завершения (compspec) не генерирует критериев соответствия.
Сообщить readline, что спецификация завершения генерирует названия файлов, поэтому она может выполнять любую обработку, связанную с названиями файлов (например, добавить косую черту к названиям каталогов, заключить специальные символы в кавычки или подавитьь пробелы в конце). Это предназначено для использования с функциями оболочки.
Сообщить readline заключать в кавычки все завершенные слова, даже если они не являются названиями файлов.
Сообщить readline, чтобы она не заключала завершенные слова в кавычки, если они являются названиями файлов (по умолчанию названия файлов заключаются в кавычки).
Сообщить readline, чтобы она не сортировала список возможных дополнений в алфавитном порядке.
Сообщить readline, чтобы она не добавляла пробел (по умолчанию) к словам, завершенным в конце строки.
После генерации всех совпадений, определенных спецификацией завершения, попробовать заполнить название каталога и добавить все совпадения к результатам других действий.
Это действие action может быть одним из следующих при создании списка возможных завершений:
Псевдонимы. Они также могут быть определены с помощью -a.
Названия переменных массива.
Названия привязанных клавиш Readline.
Названия встроенных команд оболочки. Они также могут быть определены с помощью -b.
Названия команд. Они также могут быть определены с помощью -c.
Названия каталогов. Они также могут быть определены с помощью -d.
Названия отключенных встроенных компонентов оболочки.
Названия включённых встроенных компонентов оболочки.
Названия экспортируемых переменных оболочки. Они также могут быть определены с помощью -e.
Названия файлов и каталогов, аналогичные завершению названия файла readline. Также может быть указано как -f.
Названия функций оболочки.
Названия групп. Для этого также может использоваться -g.
Разделы справки, принятые во встроенной команде help.
Названия хостов, взятые из файла, указанного в переменной оболочки HOSTFILE.
Названия заданий, если управление заданиями активно. Также может использоваться -j.
Зарезервированные слова оболочки. Также может использоваться -k.
Названия запущенных заданий, если управление заданиями активно.
Названия служб. Также может использоваться -s.
Допустимые аргументы для опции -o для встроенной командыset.
Названия опций оболочки, принятые во встроенной команде shopt.
Названия сигналов.
Названия остановленных заданий. Если управление заданиями активно.
Имена пользователей. Может также использоваться -u.
Названия переменных оболочки. Может также использоваться -v.
Команда command выполняется в окружающей среде подоболочки, а ее выходные данные используются в качестве возможных завершений. Аргументы передаются также, как с помощью опции -F.
Функция оболочки function выполняется в текущей среде оболочки. Когда функция выполняется, тогда первый аргумент ($1) - это название команды, аргументы которой завершаются, второй аргумент ($2) - это завершаемое слово, а третий аргумент ($3) - это слово, предшествующее завершению слова в текущей командной строке. Когда функция function завершается, тогда программируемое завершение извлекает возможные завершения из значения переменной массива COMPREPLY.
Развернуть шаблон расширения названия пути globpat, чтобы создать возможные завершения.
Добавить префикс prefix в начало каждого возможного завершения после того, как будут применены все остальные опции.
Добавить суффикс suffix к каждому возможному завершению после того, как были применены все остальные опции.
Разделить список слов wordlist, используя символы в специальной переменной IFS в качестве разделителей и расширить каждое получившееся слово. В списке слов В wordlist используются кавычки оболочки, чтобы обеспечить механизм, позволяющий словам содержать метасимволы оболочки или символы в значении IFS. Возможными завершениями являются элементы результирующего списка, которые соответствуют префиксу завершаемого слова.
Шаблон filterpat - это шаблон, используемый для расширения имени пути. Он применяется к списку возможных дополнений, сгенерированному предыдущими опциями и аргументами, и каждое завершение, соответствующее filterpat, удаляется из списка. Начальный символ ! в filterpat отменяет шаблон; в этом случае любое завершение, не соответствующее filterpat, удаляется.

Возвращаемое значение равно true, если не указана недопустимая опция или опция, отличная от -p, -r, -D, -E, или -I, не указанная без аргумента name, выполняется попытка чтобы удалить спецификацию завершения для name, для которой не существует спецификации, или при добавлении спецификации завершения возникает ошибка.

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

Используется “+” вместо “-” вместо этого отключить указанный атрибут, за исключением того, чтобы +a и +A не могли использоваться для уничтожения переменных массива, а +r не удалять атрибут только для чтения.

При использовании в функции, команды declare и typeset делают каждое значение name локальным, как в случае с командой local, если только не указана опция -g. Если за именованием переменной следует =value, то значение переменной устанавливается равным значению value. При использовании -a или -A и синтаксиса составного присваивания для создания переменных массива, дополнительные атрибуты вступают в силу только после их присвоения.

Возвращаемое значение равно 0, если не обнаружена недопустимая опция, тогда предпринимается попытка определить функцию с помощью “-f foo=bar”, попытки присвоить значение переменной, доступной только для чтения, предпринимается попытка присвоить значение переменной массива без использования синтаксиса составного присвоения (смотрите Массивы above), одно из names не является допустимым названием переменной оболочки, предпринимается попытка отключить статус только для чтения для переменной только для чтения, предпринимается попытка отключить статус массива для переменной массива или предпринимается попытка отобразить несуществующую функцию с помощью -f.

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

Возвращаемое значение равно 0, если только не указана недопустимая опция или если n не индексирует за пределы окончания стека каталогов.

Если нет опций, то удалить все идентификаторы id из таблицы активных заданий. Каждый id может быть спецификацией задания jobspec или идентификатором процесса pid; если id является pid, то disown использует задание, содержащее pid, как jobspec.
Если указана опция -h, то disown не удаляет задания, соответствующие каждому id, из таблицы заданий, а помечает их, чтобы оболочка не отправляла SIGHUP заданию, если оболочка получит SIGHUP.
Если опция id не указана, то -a означает удаление или пометку всех заданий; опция -r без аргумента id удаляет или помечает запущенные задания. Если id не указан и не указаны ни опция -a, ни опция -r, то disown удаляет или помечает текущее задание.
Возвращаемое значение равно 0, если только в id не указано допустимое задание.
Ввести аргументы arg, разделенные пробелами, за которыми следует новая строка. Статус возврата равен 0, если не возникает ошибка записи. Если указано значение -n, то завершающая новая строка не выводится.
Если задана опция -e, то echo интерпретирует следующие символы, экранируемые обратной косой чертой. Опция -E отключает интерпретацию этих экранирующих символов даже в системах, где они интерпретируются по умолчанию. Опция оболочки xpg_echo определяет, интерпретировать ли какие-либо опции echo и расширять ли эти символы escape. Команда echo не интерпретирует -- как окончание опций.
Команда echo интерпретирует следующие последовательности escape:
сигнал тревоги (сирена)
возврат на один символ
подавлять дальнейший вывод
экранирующий символ
новая страница
новая строка
возврат каретки
горизонтальная табуляция
вертикальная табуляция
\\
обратная косая черта
\0nnn
Восьмиразрядный символ, значением которого является восьмеричное значение nnn (от нуля до трех восьмеричных цифр).
Восьмибитный символ, значением которого является шестнадцатеричное значение HH (одна или две шестнадцатеричные цифры).
Символ в кодировке Unicode (ISO/IEC 10646), значением которого является шестнадцатеричное значение HHHH (от одной до четырех шестнадцатеричных цифр).
Символ в кодировке Unicode (ISO/IEC 10646), значением которого является шестнадцатеричное значение HHHHHHHH (от одной до восьми шестнадцатеричных цифр).

echo записывает все не распознанные символы, экранированные обратной косой чертой, без изменений.

Включение и отключение встроенных команд оболочки. Отключение встроенной команды позволяет запускать исполняемый файл с тем же названием, что и у встроенной команды оболочки, без указания полного пути, хотя оболочка обычно выполняет поиск встроенных команд перед файлами.
Если указано значение -n, каждое значение name отключено; в противном случае значения name включены. Например, чтобы использовать двоичный файл test, найденный с помощью PATH, вместо встроенной версии оболочки, запустите “enable -n test”.
Если аргументы name не указаны или если указана опция -p, то вывести список встроенных команд оболочки. При отсутствии других опций список будет состоять из всех включенных встроенных команд оболочки. Если указано значение -n, то выводятся только отключенные встроенные команды. Если указано значение -a, то выводимый список включает все встроенные команды с указанием того, включены они или нет. Опция -s означает ограничение вывода на POSIX special встроенных команд.
Опция -f означает загрузку новой встроенной команды с названием name из общего объекта filename в системах, поддерживающих динамическую загрузку. Если filename не содержит косой черты, то Bash будет использовать значение переменной BASH_LOADABLES_PATH в качестве списка каталогов, разделенных двоеточием, в которых будет выполнен поиск filename. Значение по умолчанию для BASH_LOADABLES_PATH зависит от системы и может включать “.” принудительный поиск в текущем каталоге. Опция -d приведет к удалению встроенной команды, ранее загруженной с помощью -f. Если -s используется с -f, то новая встроенная команда становится POSIX специальной встроенной командой.
Если опции не указаны и name не является встроенной командой оболочки, то enable попытается загрузить name из общего объекта с названием name, как если бы команда была “enable -f name name”.
Возвращаемое значение равно 0, если только name не является встроенным в оболочку или не произошла ошибка при загрузке нового встроенного файла из общего объекта.
Объединить аргументы arg в одну команду, разделив их пробелами. Затем Bash считывает и выполняет эту команду и возвращает ее статус завершения как статус возврата eval. Если нет аргументов argsили есть только нулевые аргументы, то eval возвращает 0.
Если указана команда command, то она заменяет оболочку без создания нового процесса. Команда command не может быть встроенной командой оболочки или функцией. Аргументы arguments становятся аргументами команды command. Если указана опция -l, то оболочка ставит тире в начале нулевого аргумента, передаваемого в command. Это то, что делает login(1). Опция -c приводит к тому, что command выполняется с пустым окружением. Если указано значение -a, то оболочка передает именование name в качестве нулевого аргумента выполняемой команде.
Если по какой-либо причине команда command не может быть выполнена, то завершается работа неинтерактивной оболочки, если только не включена опция execfail. В этом случае она возвращает ненулевой статус. Интерактивная оболочка возвращает ненулевой статус, если файл не может быть выполнен. Подоболочка завершает работу безоговорочно, если exec завершается ошибкой.
Если команда command не определена, то в текущей оболочке вступают в силу любые перенаправления, а статус возврата равен 0. Если возникает ошибка перенаправления, то статус возврата равен 1.
Приводит к завершению работы оболочки со статусом n. Если n опущено, то статус завершения соответствует последней выполненной команде. Любая ошибка в EXIT выполняется до завершения работы оболочки.
Введенные названия names помечаются для автоматического экспорта в среду последующих выполняемых команд. Если задана опция -f, то названия names относятся к функциям.
Опция -n отменяет экспорт или удаляет атрибут export из каждого названия name. Если названия names не заданы или указана только опция -p, то export отображает список названий всех экспортируемых переменных в стандартном выводе. При совместном использовании -p и -f отображаются экспортированные функции. Опция -p отображает выходные данные в форме, которая может быть повторно использована в качестве входных данных.
Команда export позволяет задать значение переменной при ее экспорте или не экспорте, указав после именования переменной значение =value. При этом значение переменной устанавливается равным value, а атрибут "export" изменяется. Команда export возвращает статус завершения, равный 0, если не обнаружена недопустимая опция, одно из наименований names не является допустимым наименованием переменной оболочки или если -f содержит название name, которое не является функцией.
Ничего не делает; возвращает ненулевой статус.
Первая форма выбирает диапазон команд от первой first до последней last из списка истории и отображает или редактирует и повторно выполняет их. First и last могут быть указаны в виде строки (чтобы найти последнюю команду, начинающуюся с этой строки) или в виде числа (индекс в списке истории, где отрицательное число используется как смещение от номера текущей команды).
При выводе списка значение first или last, равное 0, эквивалентно -1, а значение -0 эквивалентно текущей команде (обычно команде fc); в противном случае значение 0 эквивалентно -1, а значение -0 недопустимо. Если значение last не указано, оно устанавливается в текущую команду для вывода списка (чтобы “fc -l -10” вывести последние 10 команд), а в противном случае, вывести first. Если first не указано, то для редактирования используется предыдущая команда, а для вывода -16.
Если указана опция -l, то команды отображаются в стандартном выводе. Опция -n не указывает номера команд при выводе. Опция -r изменяет порядок следования команд на противоположный.
В противном случае fc вызывает редактор с названием ename для файла, содержащего эти команды. Если ename не указано, то fc использует значение переменной FCEDIT и значение EDITOR, если FCEDIT не задано. Если ни одна из переменных не задана, то fc использует vi. Когда редактирование завершено, fc считывает файл, содержащий отредактированные команды и эхо-сигналы, и выполняет их.
Во второй форме fc повторно выполняет команду command после замены каждого экземпляра pat на rep. Команда Command интерпретируется так же, как first выше.
Полезным псевдонимом для использования с fc является “r=fc”-s(dq" чтобы при вводе “r cc” запускать последнюю команду, начинающуюся с “cc” и выводить “r” повторно для выполнения команду.
Если используется первая форма, то возвращаемое значение равно нулю, если только не встречается недопустимая опция или если first или last не указывают строки истории вне диапазона. При редактировании и повторном выполнении файла команды возвращаемым значением является значение последней выполненной командой или ошибка (failure), если во временном файле возникает ошибка. Если используется вторая форма, то возвращаемый статус соответствует повторно выполненной команде, если только cmd не указывает допустимую запись в истории, и в этом случае fc возвращает ненулевой статус.
Вывести задание jobspec на передний план и сделать его текущим заданием. Если jobspec отсутствует, то fg использует представление оболочки о текущем задании current job. Возвращаемое значение соответствует команде, помещенной на передний план или ошибке при запуске, когда управление заданиями отключено, или при запуске с включенным управлением заданиями, если jobspec не указывает допустимое задание, или jobspec указывает задание, которое было запущено без управления заданием.
Команда getopts используется скриптами и функциями оболочки для анализа позиционных параметров и получения опций и их аргументов. optstring содержит символы опции, которые необходимо распознать; если за символом следует двоеточие, то ожидается, что опция будет иметь аргумент, который должен быть отделен от неё пробелом. Двоеточие и вопросительный знак не могут использоваться в качестве символов опции.
Каждый раз, когда она вызывается, getopts помещает следующую опцию в переменную оболочки name, инициализируя name, если она не существует и индекс следующего обрабатываемого аргумента в переменную OPTIND. OPTIND инициализируется значением 1 при каждом вызове оболочки или сценария оболочки. Когда для опции требуется аргумент, то getopts помещает этот аргумент в переменную OPTARG.
Оболочка не сбрасываетпеременную OPTIND автоматически; она должна быть сброшена вручную между несколькими вызовами getopts в рамках одного и того же вызова оболочки, чтобы использовать новый набор параметров.
Когда она достигает конца опций, getopts завершает работу с возвращаемым значением, превышающим ноль. Значение OPTIND равно индексу первого аргумента, не включающего опцию, а значение name равно ?.
Команда getopts обычно анализирует позиционные параметры, но если в качестве значений arg указано больше аргументов, то вместо этого getopts анализирует их.
Команда getopts может сообщать об ошибках двумя способами. Если первый символ optstring является двоеточием,то getopts использует "тихий" silent отчет об ошибках. При нормальной работе getopts выводит диагностические сообщения при обнаружении недопустимых опций или отсутствующих аргументов опций. Если переменной OPTERR присвоено значение 0, то getopts не выводит никаких сообщений об ошибках, даже если первый символ optstring не является двоеточием.
Если команда getopts обнаруживает недопустимую опцию, то она помещает ? в название name и, если "тихо" (silent) не определено, то выводит сообщение об ошибке и сбрасывает значение OPTARG. Если же "тихо" определено, то getopts присваивает найденному символу опции значение OPTARG и не выводит диагностическое сообщение.
Если требуемый аргумент не найден, а команда getopts не "тихая" , то getopts присваивает значению name знак вопроса (?), сбрасывает OPTARG и выводит диагностическое сообщение. Если же getopts "тихая", то она заменяет значение name двоеточием (:), а значение OPTARG - найденным символом опции.
getopts возвращает значение true, если найдена указанная или неуказанная опция. Возвращает значение false, если обнаружен конец списка опций или возникает ошибка.
Каждый раз, когда вызывается hash, он запоминает полный путь к команде name, определенный путем поиска в каталогах в $PATH. Все ранее запомненные пути, связанные с name, отбрасываются. Если указана опция -p, то hash использует название filename в качестве полного пути к команде.
Опция -r приводит к тому, что оболочка забывает все сохраненные местоположения. Присвоение переменной PATH также очищает все хэшированные названия файлов. Опция -d приводит к тому, что оболочка "забывает" сохраненное местоположение каждого файла name.
Если указана опция -t, то hash выводит полный путь, соответствующий каждому name. Если несколько аргументов name указаны с помощью -t, то hash выводит name перед соответствующим хэшированным полным путем. Опция -l отображает выходные данные в формате, который может быть повторно использован в качестве входных данных.
Если аргументы не указаны или указан только -l, то hash выводит информацию о запомненных командах. Опции -t, -d и -p (опции, которые действуют на аргументы name) являются взаимоисключающими. Только одна из них будет действующей. Если указано более одной опции, то опция -t имеет более высокий приоритет, чем опция -p и обе опции имеют более высокий приоритет, чем -d.
Статус возврата равен нулю, если только name не найдено или не определена недопустимая опция.
Отображать справочную информацию о встроенных командах. Если указано значение шаблон pattern , то команда help предоставляет подробную справку по всем командам, соответствующим шаблону, как описано ниже; в противном случае выводится список всех встроенных команд и составных команд оболочки.
Опции, если они определены, имеют следующие значения:
-d
Вывести на дисплей описание каждого шаблона pattern
Вывести на дисплей описание каждого шаблона pattern в формате, подобном странице руководства (manpage)
Вывести на дисплей только обзор об использовании для каждого шаблона pattern
Если шаблон pattern содержит символы, соответствующие шаблону (смотрите подраздел Соответствие шаблону выше), то это рассматривается как шаблон оболочки и команда help выводит описание каждого раздела справки, соответствующего pattern.
Если это не так, но шаблон pattern точно соответствует названию раздела справки, то команда help выводит описание, связанное с этим разделом. В противном случае команда help выполняет сопоставление префиксов и выводит описания всех соответствующих разделов справки.
Возвращаемый статус равен 0, если только ни одна команда не соответствует шаблону pattern.
Если опции отсутствуют, то выводится список истории команд с номерами. Записи, начинающиеся с *, были изменены. В аргументе n указываются только последние n записей. Если переменная оболочки HISTTIMEFORMAT задана и не равна нулю, то она используется в качестве строки формата для strftime(3) для вывода временной метки, связанной с каждой выводимой записью истории. Если в history используется HISTTIMEFORMAT, то не будет выведен промежуточный пробел между отформатированной меткой времени и записью истории.
Если указано значение filename, то history использует его в качестве названия файла истории; если нет, то используется значение HISTFILE. Если значение filename не указано, а значение HISTFILE не задано или равно нулю, то опции -a, -n, -r и -w не действуют.
Опции, если они указаны, имеют следующие значения:
Очистить список истории, удалив все записи. Это можно использовать вместе с другими опциями для замены списка истории.
Удалить запись истории в позиции offset. Если значение offset отрицательное, то оно интерпретируется как относительное значение, на единицу превышающее последнюю позицию в истории, поэтому отрицательные индексы отсчитываются от конца истории, а индекс, равный -1, относится к текущей команде history -d.
Удалите диапазон записей истории между позициями start и end включительно. Положительные и отрицательные значения для start и end интерпретируются так, как описано выше.
Добавить следующие “new” строки истории в файл истории. Это строки истории, введенные с начала текущего сеанса bash, но еще не добавленные в файл истории.
Прочитать строки истории, которые еще не были прочитаны из файла истории и добавить их в текущий список истории. Это строки, добавленные в файл истории с начала текущего сеанса оболочки bash.
Прочитать файл истории и добавить его содержимое в текущий список истории.
Записать текущий список истории в файл истории, перезаписав файл истории.
Выполнить подстановку истории в следующих аргументах args и отобразить результат в стандартном выводе, не сохраняя результаты в списке истории. Каждый аргумент arg должен быть заключен в кавычки, чтобы отключить обычное расширение истории.
Сохранить аргументы args в списке истории как отдельную запись. Последняя команда в списке истории удаляется перед добавлением аргументов args.
Если задана переменная HISTTIMEFORMAT,то команда history записывает информацию о метке времени, связанной с каждой записью истории, в файл истории, помеченный символом комментария к истории, как описано выше. При чтении файла истории строки, начинающиеся с символа комментария к истории, за которым сразу следует цифра, интерпретируются как временные метки для следующей записи истории.
Возвращаемое значение равно 0, если только не задана недопустимая опция, не произошла ошибка при чтении или записи файла истории, в качестве аргумента для -d указано недопустимое значение смещения offset или диапазон или не завершилось ошибкой расширение истории, указанное в качестве аргумента для -p.
В первой форме перечислены активные задания. Параметры имеют следующие значения:
Список идентификаторов процессов в дополнение к обычной информации.
Выводить на дисплей информацию только о заданиях, статус которых изменился с момента последнего уведомления пользователя об их статусе.
Указать только идентификатор главного процесса заданий группы процессов.
Выводить на дисплей только запущенные задания.
Выводить на дисплей только остановленные задания.
Если указано jobspec, то команда jobs ограничивает вывод информацией об этом задании. Возвращаемый статус равен 0, если только не обнаружена недопустимая опция или не указано недопустимое значение jobspec.
Если указана опция -x, то команда jobs заменяет любое jobspec, найденное в command или args, на соответствующий идентификатор группы процессов и выполняет command, передавая её аргументы args и возвращает статус завершения.
Команда посылает сигнал, указанный sigspec или signum, процессам, именуемым каждым id. Каждый id может быть спецификацией задания jobspec или идентификатором процесса pid. Сигнал sigspec - это либо название сигнала без учета регистра, такое как SIGKILL префиксом SIG или без него), либо номер сигнала; signum - это номер сигнала. Если sigspec не указано, то kill посылает SIGTERM.
Опция -l выводит список названий сигналов. Если при вводе опции -l указываются какие-либо аргументы, то kill выводит названия сигналов, соответствующих аргументам, а возвращаемый статус равен 0. Аргумент exit_status для -l - это число, указывающее либо номер сигнала, либо статус завершения процесса, завершенного сигналом; если он указан, то kill выводит название сигнала, который вызвал завершение процесса. kill предполагает, что все статусы завершения процесса больше 128; всё, что меньше этого значения, является номером сигнала. Опция -L эквивалентна опции -l.
Команда kill возвращает значение true, если хотя бы один сигнал был успешно отправлен, или значение false, если произошла ошибка или обнаружена недопустимая опция.
Каждый аргумент arg вычисляется как арифметическое выражение (смотрите раздел АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ above). Если последнее значение arg равно 0, то let возвращает 1; в противном случае let возвращает 0.
Для каждого аргумента создать локальную переменную с названием name и присвойте ей значение value. Опция option может быть любой из опций, принятых в declare. Когда команда local используется внутри функции, то это приводит к тому, что переменная name имеет видимую область действия, ограниченную этой функцией и ее дочерними элементами. Использование команды local вне функции является ошибкой.
Если name определено, то это делает набор опций оболочки локальным для функции, в которой вызывается команда local: все опции оболочки, измененные с помощью set, встроенной в функцию, после вызова local восстанавливаются к их исходным значениям, когда функция возвращает значение. Восстановление выполняется так, как если бы была выполнена серия команд set для восстановления значений, которые были на месте до запуска функции.
Без операндов local выводит список локальных переменных на стандартный вывод.
Возвращаемый статус равен 0, если только local не используется вне функции, не указано недопустимое name или name не является переменной, доступной только для чтения.
Выйти из оболочки, вернув родительской оболочке статус n.
Считать строки из стандартного ввода или из файлового дескриптора fd, если указана опция -u, в переменную индексированного массива Iarray. Переменная MAPFILE по умолчанию является array. Опции, если они указаны, имеют следующие значения:
Использовать первый символ delim для завершения каждой строки ввода, а не символ новой строки. Если delim является пустой строкой, то mapfile завершит строку, когда будет считан символ NUL.
Скопировать не более строк count. Если значение count равно 0, то скопировать все строки.
Начать присвоение массиву array с индексом origin. Индекс по умолчанию равен 0.
Отбросить первые прочитанные строки count.
Удалить завершающий символ delim (новая строка по умолчанию) из каждой прочитанной строки.
Считывать строки из файлового дескриптора fd вместо стандартного ввода.
Вычислять callback при каждом чтении строк quantum. Опция -c указывает quantum.
Указывать количество строк, прочитанных между каждым вызовом callback.
Если -C указано без -c, то значение по умолчанию равно 5000. При вычислении значения "обратный вызов" callback в качестве дополнительных аргументов указывается индекс следующего элемента массива, который должен быть назначен, и строка, которая должна быть назначена этому элементу. callback вычисляется после чтения строки, но до назначения элемента массива.
Если не указано явное происхождение, то mapfile очистит массив array перед назначением ему.
mapfile возвращает ноль, если не указана недопустимая опция или аргумент опции array недопустим или не может быть назначен, или если array не является индексированным массивом.
Удалить записи из стека каталогов. Элементы нумеруются от 0, начиная с первого каталога, указанного в dirs, поэтому popd эквивалентно “popd +0.” При отсутствии аргументов popd удаляет верхний каталог из стека и изменяет его на новый верхний каталог. Аргументы, если они указаны, имеют следующие значения:
Подавлять обычное изменение каталога при удалении каталогов из стека и манипулировать только стеком.
+n
Удалить из стека n-ю запись, отсчитываемую слева от списка, показанного dirs, начиная с нуля. Например: “popd +0” удаляет первый каталог, “popd +1” затем второй.
Удалить n-ю запись, отсчитываемую справа от списка, показанного с помощью dirs, начиная с нуля. Например: “popd -0” удаляет последний каталог, “popd -1” затем, предпоследний.
Если верхний элемент стека каталогов изменен, а значение -n не было указано, то popd использует встроенную команду cd для перехода к каталогу, расположенному в верхней части стека. Если cd завершается ошибкой, то popd возвращает ненулевое значение.
В противном случае, popd возвращает значение false, если указана недопустимая опция, стек каталогов пуст или n указывает несуществующую запись в стеке каталогов.
Если команда popd выполнена успешно, то bash запускает dirs, чтобы отобразить окончательное содержимое стека каталогов, а возвращаемый статус равен 0.
Записать отформатированные аргументы arguments в стандартный вывод под управлением format. Опция -v присваивает выходные данные переменной var вместо того, чтобы выводить их на стандартный вывод.
Формат format - это символьная строка, содержащая объекты трех типов: обычные символы, которые просто копируются в стандартный вывод, управляющие последовательности символов, которые преобразуются и копируются в стандартный вывод и спецификации формата, каждая из которых приводит к выводу следующего за ней аргумента argument. В дополнение к стандартным символам формата printf(3) и cCsSndiouxXeEfFgGaA, команда printf интерпретирует следующие дополнительные спецификаторы формата:
%b
приводит к тому, что printf расширяет управляющие последовательности с обратной косой чертой в соответствующем аргументе argument таким же образом, как и echo -e.
%q
приводит к тому, что команда printf выводит соответствующий аргумент argument в формате, который может быть повторно использован в качестве входных данных оболочки. %q и %Q используют стиль кавычек $'', если этого требуют какие-либо символы в строке аргумента и кавычки с обратной косой чертой в противном случае. Если в строке формата используется альтернативная форма команды printf, то эти два формата заключают строку аргумента в одинарные кавычки.
%Q
тоже, что и %q, но применяет любую указанную точность к аргументу argument, прежде чем заключать его в кавычки.
%(datefmt)T
приводит к тому, что команда printf выводит строку даты и времени, полученную в результате использования datefmt в качестве строки формата для strftime(3). Соответствующий аргумент argument - это целое число, представляющее количество секунд, прошедших с начала эпохи. Этот спецификатор формата распознает два специальных значения аргумента: -1 представляет текущее время, а -2 - время вызова оболочки. Если аргумент не указан, то преобразование выполняется так, как если бы было указано значение -1. Это исключение из обычного поведения printf.
Все спецификаторы формата %b, %q и %T используют аргументы ширины поля и точности из спецификации формата и записывают это количество байт (или используют поле такой ширины) в расширенный аргумент, который обычно содержит больше символов, чем исходный.
Спецификатор формата %n принимает соответствующий аргумент, который обрабатывается как название переменной оболочки.
Спецификаторы формата %s и %c принимают модификатор l (длинный), который заставляет их преобразовывать строку аргумента в строку с широким символом и применять любую указанную ширину поля и точность в символах, а не в байтах. Спецификаторы формата %S и %C эквивалентны %ls и %lc, соответственно.
Аргументы для спецификаторов нестрокового формата обрабатываются как константы языка Си, за исключением того, что допускается использование начального знака плюс или минус, а если начальный символ представляет собой одинарную или двойную кавычку, то значением является числовое значение следующего символа с использованием текущей локали.
Формат format используется повторно по мере необходимости для использования всех аргументов arguments. Если для format требуется больше arguments, чем указано, то дополнительные спецификации формата ведут себя так, как если бы было указано нулевое значение или нулевая строка, в зависимости от обстоятельств. Возвращаемое значение равно нулю в случае успешного выполнения и не равно нулю, если указан недопустимая опция или произошла ошибка записи или присвоения.
Добавить каталог в верхнюю часть стека каталогов или повернуть стек, сделав новую верхнюю часть стека текущей рабочей директорией. При отсутствии аргументов pushd заменяет два верхних элемента стека каталогов. Аргументы, если они указаны, имеют следующие значения:
Подавлять обычную смену каталогов при ротации или добавлении каталогов в стек, манипулировать только стеком.
+n
Повернуть стек так, чтобы n-й каталог (считая слева от списка, показанного dirs, начиная с нуля) находился вверху.
Поворачивает стек так, чтобы n-й каталог (считая справа от списка, показанного dirs, начиная с нуля) находился вверху.
Добавить каталог dir в стек каталогов вверху.
После изменения стека, если опция -n не была указана, то pushd использует встроенную команду cd для перехода в каталог, расположенный в верхней части стека. Если cd завершается ошибкой, то pushd возвращает ненулевое значение.
В противном случае, если аргументы не указаны, то pushd возвращает ноль, если только стек каталогов не пуст. При смене стека каталогов pushd возвращает ноль, если только стек каталогов не пуст или если n не указывает несуществующий элемент стека каталогов.
Если команда pushd выполнена успешно, то bash запускает dirs, чтобы показать окончательное содержимое стека каталогов.
Вывести абсолютный путь к текущему рабочему каталогу. Выведенное название пути не содержит символических ссылок, если указана опция -P или включена опция -o physical для встроенной команды set. Если используется опция -L, то выводимый путь может содержать символьные ссылки. Возвращаемый статус равен 0, если только при чтении названия текущего каталога не возникает ошибка или не указана недопустимая опция.
Прочитать одну строку из стандартного ввода или из файлового дескриптора, который fd предоставил в качестве аргумента опции -u, разделить ее на слова, как описано above в подразделе Разделение слов и присвоить первое слово первому name, второе слово второму name и так далее. Если слов больше, чем названий, то оставшиеся слова и разделители между ними присваиваются последнему name. Если из входного потока считывается меньше слов, чем наименований, то оставшимся именованиям присваиваются пустые значения. Символы в значении переменной IFS используются для разбиения строки на слова с использованием тех же правил, которые оболочка использует для расширения (описано above в подразделе Разделение слов). Символ обратной косой черты (\) устраняет любое специальное значение для следующего считываемого символа и используется для продолжения строки.
Опции, если они указаны, имеют следующие значения:
Слова присваиваются последовательным индексам переменной массива aname, начиная с 0. Значение aname не задается до присвоения каких-либо новых значений. Другие аргументы name игнорируются.
Первый символ delim завершает строку ввода, а не символ новой строки. Если delim является пустой строкой, то команда read завершит строку, когда будет считан символ NUL.
Если стандартный ввод поступает с терминала, то read использует readline (смотрите раздел БИБЛИОТЕКА READLINE above) чтобы получить строку. В библиотеке Readline используются текущие настройки редактирования (или настройки по умолчанию, если редактирование строки ранее не было активным), но используется заполнение названия файла Readline по умолчанию.
Если стандартный ввод поступает с терминала, то read использует readline (смотрите раздел БИБЛИОТЕКА READLINE above) чтобы получить строку. В библиотеке Readline использует текущие настройки редактирования (или настройки по умолчанию, если редактирование строки ранее не было активным), но она использует завершение по умолчанию в bash, включая программируемое завершение.
Если для чтения строки используется библиотека readline, то read помещает текст text в буфер редактирования перед началом редактирования.
read возвращает значение после прочтения символов nchars, не дожидаясь полной строки ввода, если только не встречается задержка EOF или read, но учитывает разделитель, если перед разделителем прочитано меньше символов nchars.
read возвращает значение после прочтения ровно nchars символов, а не после ожидания полной строки ввода, если только она не столкнется с EOF или истечением времени ожидания read. Любые символы-разделители во входных данных не обрабатываются специальным образом и не вызывают возврата read до тех пор, пока не будут прочитаны символы nchars. Результат не разбивается на символы в IFS; цель состоит в том, чтобы переменной присваивались именно те символы, которые считываются (за исключением обратной косой черты; смотрите опцию -r ниже).
Выводите запрос prompt при стандартной ошибке без перевода строки в конце, прежде чем пытаться прочитать какие-либо входные данные, но только если входные данные поступают с терминала.
Обратная косая черта не используется в качестве экранирующего символа. Обратная косая черта считается частью строки. В частности, пара обратная косая черта-новая строка не может использоваться в качестве продолжения строки.
"Тихий" режим. Если ввод данных осуществляется с терминала, символы не отображаются.
Переводит команду read в режим ожидания и возвращает ошибку, если она не считывает всю строку ввода (или указанное количество символов) в течение секунд тайм-аута timeout. Тайм-аут timeout может быть десятичным числом с дробной частью, следующей за запятой. Эта опция эффективна только в том случае, если read считывает входные данные с терминала, канала или другого специального файла; при чтении из обычных файлов она не действует. Если время ожидания read истекло, то все частичные входные данные, считанные в указанную переменную name, сохраняются, а статус завершения превышает 128. Если значение timeout равно 0, то команда read немедленно возвращается, не пытаясь прочитать какие-либо данные. В этом случае статус завершения равен 0, если для указанного файлового дескриптора доступны входные данные или, в противном случае, команда read вернет значение EOF, отличное от нуля.
Команда read считывает входные данные из файлового дескриптора fd вместо стандартного ввода.
За исключением случая, когда delim является пустой строкой, тогда команда read игнорирует любые символы NUL во входных данных.
Если названия names не указаны, то команда read присваивает строку чтения без конечного разделителя, но в остальном без изменений, переменной REPLY.
Статус завершения равен нулю, если только не обнаружен конец файла или не окончен тайм-аут read (в этом случае значение состояния превышает 128), ошибка назначения переменной (например, присвоение переменной, доступной только для чтения) или неверный файловый дескриптор указан в качестве аргумента для -u.
Указанные именования names помечены как доступные только для чтения; значения этих names не могут быть изменены при последующем присвоении или отмене. Если указана опция -f, то каждое names ссылается на функцию оболочки. Опция -a ограничивает переменные индексированными массивами; опция -A ограничивает переменные ассоциативными массивами. Если указаны обе опции, то приоритет имеет опция -A. Если аргументы name не указаны или если указана опция -p, то выводится список всех названий, доступных только для чтения. Другие опции могут использоваться для ограничения вывода подмножеством набора названий, доступных только для чтения. Опция -p выводит выходные данные в формате, который может быть повторно использован в качестве входных данных.
Библиотека readonly позволяет устанавливать значение переменной одновременно с изменением атрибута readonly только для чтения , если после названия переменной ввести =value. При этом значение переменной будет равно value, а атрибут readonly только для чтения будет изменен.
Возвращаемый статус равен 0, если только не обнаружена недопустимая опция или одно из names не является допустимым наименованием переменной оболочки или -f не содержит name , которое не является функцией.
Остановить выполнение функции оболочки или исполняемого файла и вернуть вызывающей стороне значение, указанное в n. Если n опущено, то возвращаемый статус соответствует статусу последней выполненной команды. Если return выполняется обработчиком перехвата, то последняя команда, используемая для определения статуса, является последней командой, выполненной перед обработчиком перехвата. Если return выполняется во время перехвата DEBUG,то последняя команда, используемая для определения статуса, является последней командой, выполненной обработчиком перехвата перед вызовом return.
Когда return используется для завершения выполнения скрипта, выполняемого командой . (source), то это приводит к тому, что оболочка прекращает выполнение этого скрипта и возвращает либо n, либо статус завершения последней команды, выполненной в скрипте, в качестве выхода статус скрипта. Если указано значение n, то возвращаемое значение равно его младшим 8 битам.
Любая команда, связанная с ловушкой RETURN, выполняется до того, как выполнение возобновится после выполнения функции или скрипта.
Статус возврата отличен от нуля, если return задается в качестве нечислового аргумента или используется вне функции, а не во время выполнения скрипта с помощью . или source.
Без опций отображать название и значение каждой переменной оболочки в формате, который можно повторно использовать в качестве входных данных для установки или сброса текущих переменных. Переменные, доступные только для чтения, не могут быть сброшены. В режиме posix отображаются только переменные оболочки. Выходные данные сортируются в соответствии с текущей локалью. Если заданы опции, то они устанавливают или отменяют установку атрибутов оболочки. Все аргументы, оставшиеся после обработки опций, рассматриваются как значения позиционных параметров и присваиваются по порядку $1, $2, ..., $n. Опции, если они указаны, имеют следующие значения:
Каждой создаваемой или изменяемой переменной или функции присваивается атрибут export, который помечается для экспорта в окружающую среду последующих команд.
Сообщать о состоянии завершенных фоновых заданий немедленно, а не до появления следующего основного запроса или после завершения выполнения команды переднего плана. Это действует только при включенном управлении заданиями.
Немедленно завершить работу, если используется конвейер pipeline (который может состоять из одной простой команды simple command), списка listили составной команды compound command (смотрите раздел ГРАММАТИКА ОБОЛОЧКИ above), завершает работу с ненулевым статусом. Оболочка не завершает работу, если команда, которая завершилась ошибкой, является частью списка команд, следующего непосредственно за зарезервированным словом while или until, частью теста, следующего за зарезервированными словами if или elif, частью любой команды, выполняемой в && или перечислении ||, за исключением команды, следующей за последней && или ||, любую команду в конвейере, кроме последней (в зависимости от состояния опции оболочки pipefail) или если возвращаемое значение команды инвертируется с помощью !. Если составная команда, отличная от подоболочки, возвращает ненулевой статус из-за сбоя команды, в то время как -e игнорировалась, то оболочка не завершает работу. Если задана ошибка в ERR, то она выполняется до завершения работы оболочки. Эта опция применяется к среде оболочки и каждой среде подоболочки в отдельности (смотрите раздел СРЕДА ВЫПОЛНЕНИЯ КОМАНД above), и может привести к завершению работы подоболочек перед выполнением всех команд в подоболочке.
Если составная команда или функция оболочки выполняется в контексте, где -e игнорируется, ни на одну из команд, выполняемых в теле составной команды или функции, не повлияет -e, даже если -e установлено и команда возвращает статус ошибки. Если составная команда или функция оболочки устанавливает значение -e при выполнении в контексте, где значение -e игнорируется, то эта настройка не будет иметь никакого эффекта до завершения выполнения составной команды или команды, содержащей вызов функции.
Отключение расширения названия пути.
Запоминать расположение команд при их поиске для выполнения. По умолчанию эта функция включена.
Все аргументы в виде операторов присваивания поместить в окружающую среду команды, а не только те, которые предшествуют названию команды.
Режим мониторинга. Включено управление заданиями. Эта опция включена по умолчанию для интерактивных оболочек в системах, которые ее поддерживают (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЯМИ above). Все процессы выполняются в отдельной группе процессов. Когда фоновое задание завершается, тогда оболочка выводит строку, содержащую статус завершения.
Считывать команды, но не выполнять их. Это может использоваться для проверки сценария оболочки на наличие синтаксических ошибок. Интерактивные оболочки это игнорируют.
Значение option-name может быть одним из следующих:
То же, что -a.
То же, что -B.
Использовать интерфейс редактирования командной строки в стиле emacs. Это включено по умолчанию, когда оболочка является интерактивной, если только оболочка не запускается с опцией --noediting. Это также влияет на интерфейс редактирования, используемый для read -e.
То же, что -e.
То же, что -E.
То же, что -T.
То же,что -h.
То же, что -H.
Включить журнал истории команд, как описано выше above в разделе ИСТОРИЯ. Эта опция включена по умолчанию при работе оболочки в интерактивном режиме.
Эффект такой, как если бы команда оболочки “IGNOREEOF=10” была выполнена (смотрите подраздел Переменные оболочки above).
То же, что -k.
То же, что -m.
То же, что -C.
То же, что -n.
То же, что -f.
В настоящее время игнорируется.
То же, что -b.
То же, что -u.
То же, что -t.
То же, что -P.
Если задано, возвращаемое значение конвейера равно значению последней (самой правой) команды, которая завершается с ненулевым статусом, или равно нулю, если все команды в конвейере завершаются успешно. По умолчанию эта опция отключена.
Включить режим posix; изменить поведение bash, в котором операции по умолчанию отличаются от стандартных операций для POSIX , чтобы они соответствовали стандарту. Смотрите раздел СМОТРИТЕ ТАКЖЕ below для получения ссылки на документ, в котором подробно описывается, как режим posix влияет на поведение bash.
То же, что -p.
То же, что -v.
Использовать интерфейс редактирования командной строки в стиле vi. Это также влияет на интерфейс редактирования, используемый для read -e.
То же, что -x.

Если -o указано без option-name, то команда set выводит текущие настройки опций оболочки. Если +o не содержит option-name, то set выводит серию команд set, чтобы воссоздать текущие настройки опций в стандартном выводе.

Включить привилегированный режим privileged. В этом режиме оболочка не считывает файлы $ENV и $BASH_ENV, функции оболочки не наследуются от окружающей среды, а переменные SHELLOPTS, BASHOPTS, CDPATH и GLOBIGNORE, если они появляются в среде, игнорируются. Если оболочка запущена с идентификатором эффективного пользователя (группы), который не равен реальному идентификатору пользователя (группы), а опция -p не указана, то выполняются эти действия и в качестве эффективного идентификатора пользователя устанавливается реальный идентификатор пользователя. Если при запуске указана опция -p, то действующий идентификатор пользователя не сбрасывается. При отключении этой опции для эффективных идентификаторов пользователя и группы будут установлены реальные идентификаторы пользователя и группы.
Включить режим ограниченного доступа оболочки. Если эта опция была установлена, её нельзя отменить.
Завершить работу после прочтения и выполнения одной команды.
Обрабатывать неустановленные переменные и параметры, отличные от специальных параметров “@” и “*”, или переменные массива, подписанные “@” или “*”, как ошибка при выполнении расширения параметра. Если выполняется попытка расширения для неустановленной переменной или параметра, то оболочка выводит сообщение об ошибке и, если она не является интерактивной, то завершает работу с ненулевым статусом.
Выводить строки ввода оболочки по мере их считывания.
После раскрытия каждой команды simple command, команды for, команды case, команды select или арифметической команды for вывести на дисплей расширенное значение PS4, за которым следует команда и ее расширенные аргументы или связанный с ними список слов, приводящий к стандартной ошибке.
Оболочка выполняет расширение скобок (смотрите подраздел Расширение скобок above). Это включено по умолчанию.
Если задано, то bash не перезаписывает существующий файл с помощью операторов перенаправления >, >& и <>. Использование оператора перенаправления >| вместо > переопределит это и принудительно создаст выходной файл.
Если это установлено, то любая ошибка в ERR наследуется функциями оболочки, заменами команд и командами, выполняемыми в окружающей среде подоболочки. В таких случаях ошибка ERR обычно не наследуется.
Включить подстановку истории стилей !. Эта опция включена по умолчанию, когда оболочка является интерактивной.
Если это установлено, то оболочка не разрешает символьные ссылки при выполнении таких команд, как cd, которые изменяют текущий рабочий каталог. Вместо этого она использует физическую структуру каталогов. По умолчанию bash следует логической цепочке каталогов при выполнении команд, которые изменяют текущий каталог.
Если задано, то любые ловушки в DEBUG и RETURN наследуются функциями оболочки, заменами команд и командами, выполняемыми в окружающей среде подоболочки. Ловушки DEBUG и RETURN в таких случаях обычно не наследуются.
--
Если за этой опцией не следует никаких аргументов, то отменить установку позиционных параметров. В противном случае установить для позиционных параметров значение аргументов argдаже если некоторые из них начинаются с -.
-
Сообщить об окончании выбора опций и назначить все оставшиеся аргументы arg позиционным параметрам. Опции -x и -v отключить. Если нет аргументов arg, то позиционные параметры остаются неизменными.

По умолчанию опции отключены, если не указано иное. Использование + вместо - приводит к отключению этих опций. Опции также могут быть указаны в качестве аргументов при вызове оболочки. Текущий набор опций можно найти в $-. Статус возврата всегда равен нулю, если только не встречается недопустимая опция.

Переименовать позиционные параметры из n+1 ... в $1 .... Параметры, представленные числами от $# до $#-n+1, не заданы. Значение n должно быть неотрицательным числом, меньшим или равным $#. Если n равно 0, то параметры не изменяются. Если n не задано, то предполагается, что оно равно 1. Если n больше, чем $#, то позиционные параметры не изменяются. Статус возврата больше нуля, если n больше, чем $# или меньше нуля; в противном случае статус возврата 0.
Изменить значения настроек, управляющих необязательным поведением оболочки. Это могут быть либо те настройки, которые перечислены ниже, либо, если используется опция -o, то те, которые доступны с помощью опции -o для встроенной команды set.
При отсутствии опций или при использовании опции -p вывести на дисплей список всех настраиваемых опций с указанием того, установлена ли каждая из них; если указаны какие-либо опции optnames, то вывод будет ограничен этими опциями. Опция -p отображает выходные данные в формате, которая может быть повторно использован в качестве входных данных.
Другие опции имеют следующие значения:
Включить (установить) каждое optname.
Выключить (сбросить) каждое optname.
Отключает обычный вывод (тихий режим); состояние возврата указывает, установлено или не установлено значение optname. Если несколько аргументов optname заданы с помощью -q, то статус возврата равен нулю, если включены все аргументы optname; в противном случае значение не равно нулю.
Ограничивает значения optname теми значениями, которые определены для опции -o, встроенной командой set.

Если либо -s, либо -u используется без аргументов optname, то shopt отображает только те опции, которые установлены или не установлены соответственно. Если не указано иное, опции shopt по умолчанию отключены (unset).

Статус возврата в списке опций равен нулю, если включены все optnames, в противном случае он не равен нулю. При установке или отмене настроек статус возврата равен нулю, если только optnames не является допустимой опцией оболочки.

Список опций shopt выглядит следующим образом:

Если задано, то оболочка подавляет многократное вычисление ассоциативных и индексированных индексов массива во время вычисления арифметического выражения, при выполнении встроенных команд, которые могут выполнять присвоение переменным, а также при выполнении встроенных команд, которые выполняют разыменование массива.
Устаревший; синоним для array_expand_once.
Если задано, название команды, являющееся названием каталога, то выполняется так, как если бы оно было аргументом команды cd. Эта опция используется только интерактивными оболочками.
Если задано, то названия файлов, добавленные в переменную массива BASH_SOURCE, преобразуются в полные пути (смотрите подраздел Переменные оболочки выше).
Если задано, то предполагается, что аргументом встроенной команды cd, который не является каталогом, является название переменной, значение которой является каталогом для перехода.
Если задано, то команда cd пытается исправить незначительные ошибки в написании компонента каталога. Незначительные ошибки включают в себя перенесенные символы, пропущенный символ и один дополнительный символ. Если cd исправляет название каталога, то она выводит исправленное название файла и команда выполняется. Эта опция используется только интерактивными оболочками.
Если задано, то bash проверяет, существует ли команда, найденная в хэш-таблице, прежде чем пытаться ее выполнить. Если в хэш-таблице команда больше не существует, то bash выполняет обычный поиск по пути.
Если задано, то bash отображает статус всех остановленных и запущенных заданий перед выходом из интерактивной оболочки. Если выполняются какие-либо задания, то bash откладывает выход до тех пор, пока не будет предпринята попытка второго выхода без промежуточной команды (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЯМИ above). Оболочка всегда откладывает выход из системы, если какие-либо задания остановлены.
Если задано, то bash проверяет размер окна после каждой внешней (не встроенной) команды и, при необходимости, обновляет значения LINES и COLUMNS, используя файловый дескриптор, связанный со стандартной ошибкой, если это терминал. Эта опция включена по умолчанию.
Если это установлено, то bash попытается сохранить все строки многострочной команды в одной и той же записи истории. Это позволяет легко повторно редактировать многострочные команды. Эта опция включена по умолчанию, но действует только в том случае, если включена история команд, как описано выше above согласно HISTORY.
Эти значения определяют режим совместимости оболочки (смотрите раздел РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ) below).
Если задано, то bash заключает в кавычки все метасимволы оболочки в названиях файлов и каталогов при выполнении завершения. Если значение не задано, то bash удаляет метасимволы, такие как знак доллара, из набора символов, которые будут заключены в кавычки в завершенных названиях файлов, когда эти метасимволы появятся в ссылках на переменные оболочки в словах, которые должны быть завершены. Это означает, что знаки доллара в названиях переменных, которые расширяются до каталогов, не будут заключаться в кавычки; однако любые знаки доллара, появляющиеся в названиях файлов, также не будут заключаться в кавычки. Это дейсиует только тогда, когда bash использует обратную косую черту для указания завершенных названий файлов. Эта переменная установлена по умолчанию, что является стандартным поведением bash в версиях до 4.2.
Если задано, то bash заменяет названия каталогов результатами расширения слова при заполнении названия файла. Это изменяет содержимое буфера редактирования readline. Если не задано, то bash пытается сохранить то, что ввел пользователь.
Если это установлено, то bash попытается исправить орфографию в названиях каталогов во время ввода текста, если изначально указанное название каталога не существует.
Если задано, то bash включает названия файлов, начинающиеся с “.” результата расширения названия пути. В названии файлов . и .. всегда должно быть задано явное соответствие, даже если задано значение dotglob.
Если задано, то неинтерактивная оболочка не завершит работу, если она не сможет выполнить файл, указанный в качестве аргумента для встроенной команды exec. Интерактивная оболочка не завершит работу, если exec завершится неудачно.
Если задано, то псевдонимы будут расширены, как описано выше above в разделе ПСЕВДОНИМЫ. Эта опция включена по умолчанию для интерактивных оболочек.
Если задано при вызове оболочки или в файле запуска оболочки, то настройте выполнение профиля отладчика перед запуском оболочки, аналогично опции --debugger. Если задано после вызова, то будет включено поведение, предназначенное для использования отладчиками:
1.
Опция -F для встроенной команды declare отображает название исходного файла и номер строки, соответствующие каждому названию функции, указанному в качестве аргумента.
2.
Если команда, запущенная с помощью ловушки DEBUG, то возвращается ненулевое значение, следующая команда пропускается и не выполняется.
3.
Если команда, запущенная с помощью ловушки DEBUG, то возвращает значение 2, а оболочка выполняет подпрограмму (функцию оболочки или сценарий оболочки, выполняемый встроенными командами . или source), то оболочка имитирует вызов return.
4.
BASH_ARGC и BASH_ARGV обновляются в соответствии с их описаниями above).
5.
Включена трассировка функций: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью ( command ), наследуют ловушки DEBUG и RETURN.
6.
Включено отслеживание ошибок: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью ( command ), наследуют ловушку ERR.
Если задано, то включить описанные расширенные свойства сопоставления с шаблоном above подраздел Расширение названия пути.
Если задано, то $'string' и $"string" заключаются в кавычки внутри расширений ${parameter}, заключенных в двойные кавычки. Эта опция включена по умолчанию.
Если заданы эти шаблоны, то названия файлов, которые не совпадают с шаблонами при расширении пути, приводят к ошибке расширения.
Если значение задано, то суффиксы, заданные переменной оболочки FIGNORE, приводят к тому, что слова игнорируются при выполнении завершения, даже если игнорируемые слова являются единственно возможными завершениями. Смотрите подраздел Переменные оболочки above описание FIGNORE. Эта опция включена по умолчанию.
Если задано, то выражения диапазона, используемые в выражениях в скобках для сопоставления с шаблоном (смотрите Сопоставление с шаблоном above) при выполнении сравнений вести себя так, как если бы использовался традиционный язык Си. То есть при сопоставлении с шаблоном не учитывать последовательность сопоставления в текущей локали, поэтому b не будет сопоставляться между A и B, а символы ASCII в верхнем и нижнем регистре будут сопоставляться вместе.
Если это установлено, то расширение названия пути никогда не будет совпадать с названиями файлов . и .., даже если шаблон начинается с “.”. Эта опция включена по умолчанию.
Если задано, то шаблон **, используемый в контексте расширения названия пути, будет соответствовать всем файлам и нулю или множеству каталогов и подкаталогов. Если за шаблоном следует /, то соответствуют только каталоги и подкаталоги.
Если это установлено, то сообщения об ошибках оболочки записываются в стандартном формате сообщений об ошибках GNU.
Если это установлено, то список истории добавляется к файлу, названному по значению переменной HISTFILE, при выходе из оболочки, а не перезаписывает файл.
Если задано и используется библиотека readline, то пользователю предоставляется возможность повторно отредактировать неудачную подстановку истории.
Если задано и используется библиотека readline, то результаты подстановки истории не передаются немедленно в синтаксический анализатор командной строки. Вместо этого результирующая строка загружается в буфер редактирования readline, что позволяет вносить дальнейшие изменения.
Если задано и используется библиотека readline, то bash попытается выполнить завершение названия хоста при завершении слова, содержащего @ (смотрите подраздел Завершение в разделе БИБЛИОТЕКА READLINE above). Включено по умолчанию.
Если это установлено, то bash будет отправлять SIGHUP всем заданиям при выходе из интерактивной оболочки.
Если задано, то при замене команд наследуется значение опции errexit, а не отменяется её установка в среде подоболочки. Эта опция включена, когда включен режим posix.
В интерактивной оболочке слово, начинающееся с #, приводит к игнорированию этого слова и всех остальных символов в этой строке, как и в неинтерактивной оболочке (смотрите раздел КОММЕНТАРИИ above). Эта опция включена по умолчанию.
Если установлено, а управление заданиями не активировано, то оболочка запускает последнюю команду конвейера, которая не выполняется в фоновом режиме в текущей окружающей среде оболочки.
Если это установлено и включена опция cmdhist, то многострочные команды сохраняются в журнале со встроенными символами новой строки, а не с использованием разделителей в виде точки с запятой, где это возможно.
Если задано, то локальные переменные наследуют значение и атрибуты переменной с таким же названием, которое существовало в предыдущей области видимости, до присвоения какого-либо нового значения. Атрибут nameref не наследуется.
Если задано, то вызов unset для локальных переменных в предыдущих областях действия функции помечает их, чтобы при последующем поиске они не были заданы, пока функция не вернется. Это аналогично сбросу настроек локальных переменных в текущей области видимости функции.
Оболочка устанавливает эту опцию, если она запущена как оболочка входа в систему (смотрите раздел ВЫЗОВ above). Это значение не может быть изменено.
Если задано и к файлу, который bash проверяет на наличие почты, был получен доступ с момента последней проверки, то bash выведет сообщение на дисплей “The mail in mailfile has been read”.
Если задано и используется readline, то bash не выполняет поиск PATH для возможных завершений при попытке завершения в пустой строке.
Если задано, то bash сопоставляет названия файлов без учета регистра при расширении названия пути (смотрите подраздел Расширение названия пути above).
Если задано, то bash сопоставляет шаблоны без учета регистра при выполнении сопоставления во время выполнения команд проверки условий case или [[, при выполнении расширений слов для замены шаблонов или при фильтрации возможных завершений в рамках программируемого завершения.
Если задано, то bash заключает транслируемые результаты $"... " и заключает их в одинарные кавычки вместо двойных. Если строка не транслируется, то это не имеет никакого эффекта.
Если задано, то шаблоны расширения названия пути, которые не соответствуют ни одному файлу (смотрите Расширение названия пути above) никак не расширяются и удаляются, вместо того чтобы расширяться сами по себе.
Если задано, то bash расширяет вхождения & в строке замены шаблона до текста, соответствующего шаблону, как описано в подразделе Расширение параметра above. Эта опция включена по умолчанию.
Если задано, то включить программируемое завершение (смотрите подраздел Программируемое завершение above). Эта опция включена по умолчанию.
Если задано и включено программируемое завершение, то bash рассматривает название команды, которое не имеет завершений, как возможный псевдоним и пытается расширить псевдоним. Если у команды есть псевдоним, то bash пытается программно завершить, используемое командное слово, словом полученным из расширенного псевдонима.
Если это установлено, то строки запроса после расширения подвергаются расширению параметров, замене команд, арифметическому расширению и удалению кавычек, как описано в разделе ЗАПРОС above. Эта опция включена по умолчанию.
Оболочка устанавливает эту опцию, если она запущена в режиме с ограниченным доступом (смотрите раздел ОБОЛОЧКА С ОГРАНИЧЕННЫМ ДОСТУПОМ below). Это значение не может быть изменено. Оно не сбрасывается при запуске файлов автозагрузки, позволяя файлам автозагрузки определять, имеет ли оболочка ограничения или нет.
Если это установлено, то встроенная команда shift выводит сообщение об ошибке, когда количество сдвигов превышает количество позиционных параметров.
Если задано, то встроенная команда . (source использует значение PATH для поиска каталога, содержащего файл, указанный в качестве аргумента, если опция -p не указана. По умолчанию эта опция включена.
Если это установлено, то оболочка автоматически закрывает файловые дескрипторы, назначенные с использованием синтаксиса перенаправления {varname} (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ above) вместо того, чтобы оставлять их открытыми после завершения команды.
Если задано, то встроенная команда echo, по умолчанию, расширяет escape-последовательности с обратной косой чертой. Если также включена опция оболочки posix , то команда echo не интерпретирует никакие опции.
Приостановить выполнение этой оболочки до тех пор, пока она не получит сигнал SIGCONT. Оболочка при входе или оболочка без включенного управления заданиями не могут быть приостановлены; опция -f переопределит это и принудительно приостановит их выполнение. Возвращаемый статус равен 0, если только оболочка не является оболочкой входа или если -f не указано, а управление заданиями не включено.
[ expr ]
Возвращает значение 0 (true)) или 1 (false) в зависимости от вычисления условного выражения expr. Каждый оператор и операнд должен быть отдельным аргументом. Выражения состоят из основных компонентов, описанных above в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ. test не принимает никаких опций, а также не принимает и не игнорирует аргумент -- как обозначающий окончание опций.
Выражения могут быть объединены с помощью следующих операторов, перечисленных в порядке убывания приоритета. Вычисление зависит от количества аргументов; смотрите ниже. В команде test используется приоритет операторов при наличии пяти или более аргументов.
! expr
Истинно если expr ложно.
( expr )
Возвращает значение expr. Это может использоваться для переопределения обычного приоритета оператора.
Истинно, если оба значения expr1 и expr2 являются истинными.
Истинно, если одно из expr1 или expr2 является истинным.

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

0 аргументов
Выражение ложно.
1 argument
Выражение истинно тогда и только тогда, когда аргумент не равен нулю.
2 аргумента
Если первый аргумент равен !, то выражение истинно тогда и только тогда, когда второй аргумент равен нулю. Если первым аргументом является одним из унарных условных операторов, перечисленных above в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ, то выражение истинно, если выполняется унарный тест. Если первый аргумент не является допустимым унарным условным оператором, то выражение ложно.
3 аргумента
Следующие условия применяются в указанном порядке. Если вторым аргументом является один из перечисленных бинарных условных операторов above в соответствии с разделом УСЛОВНЫЕ ВЫРАЖЕНИЯ, то результатом выражения является результат двоичного теста с использованием первого и третьего аргументов в качестве операндов. Операторы -a и -o считаются двоичными операторами при наличии трех аргументов. Если первым аргументом является !, то значение является инверсией двух аргументного теста с использованием второго и третьего аргументов. Если первый аргумент в точности равен (, а третий аргумент в точности равен ), то результатом будет проверка второго аргумента с помощью одного аргумента. В противном случае выражение будет ложным.
4 аргумента
Следующие условия применяются в указанном порядке. Если первым аргументом является !, то результатом является инверсия выражения из трех аргументов, составленного из остальных аргументов. Если первый аргумент в точности равен (, а четвертый аргумент в точности равен ), то результатом является проверка второго и третьего аргументов с помощью двух аргументов. В противном случае выражение анализируется и вычисляется в соответствии с приоритетом и с использованием правил, перечисленных выше.
5 или более аргументов
Выражение анализируется и вычисляется в соответствии с приоритетом с использованием правил, перечисленных выше.

Когда оболочка находится в режиме posix или если выражение является частью команды [[, то операторы < и > выполняют сортировку с использованием текущей локали. Если оболочка не находится в режиме posix, то команды test и [ выполняют лексикографическую сортировку с использованием порядка ASCII.

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

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

Если указан limit, а опция -a не используется, то новым значением указанного ресурса будет limit. Если опция не указана, то предполагается значение -f.

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

Установить для маски создания пользовательского файла значение режима mode. Если mode начинается с цифры, то это интерпретируется как восьмеричное число; в противном случае это интерпретируется как символьная маска режима, аналогичная той, которая принята в chmod(1). Если опция mode опущена, то umask выводит текущее значение маски. Опция -S без аргумента mode выводит маску в символьном формате; по умолчанию выводится восьмеричное число. Если указана опция -p, а опция mode опущена, то выходные данные будут представлены в формате, который может быть повторно использован в качестве входных данных. Возвращаемый статус равен нулю, если режим был успешно изменен или если аргумент mode не был указан и отличен от нуля в противном случае.
Удалить все названия name из списка определенных псевдонимов. Если указано значение -a, то удалить все определения псевдонимов. Возвращаемое значение равно true, за исключением того случая, когда указанное name не является определением псевдонима.
Для каждого названия name удалить соответствующую переменную или функцию. Если задана опция -v, то каждое name ссылается на переменную оболочки и эта переменная удаляется. Если указано значение -f, то каждое значение name ссылается на функцию оболочки и определение функции удаляется. Если указана опция -n, а name является переменной с атрибутом nameref, то значение name будет отменено, но не значение переменной, на которую оно ссылается. Опция -n не действует, если указана опция -f. Переменные и функции, доступные только для чтения, не могут быть отключены. Когда переменные или функции удаляются, то они также удаляются из среды, передаваемой последующим командам. Если опции не указаны, то каждое name ссылается на переменную; если переменной с таким наименованием нет, то функция с таким наименованием, если таковая имеется, не задана. Некоторые переменные оболочки могут быть не заданы. Если какая-либо переменная из BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME, GROUPS, HISTCMD, LINENO, RANDOM, SECONDS или SRANDOM не заданы, то они теряют свои особые свойства, даже если впоследствии они будут сброшены. Статус выхода равен true, за исключением того случая, когда указанное name не доступно только для чтения или не может быть сброшено.
Ожидать завершения каждого указанного дочернего процесса id и вернуть статус завершения последнего идентификатора id. Каждый id может быть идентификатором процесса pid или спецификацией задания jobspec; если указана спецификация задания, то wait ожидает завершения всех процессов в задании.
Если опции или идентификаторы id не указаны, то команда wait ожидает выполнения всех запущенных фоновых заданий и замены последнего выполненного процесса, если его идентификатор процесса совпадает с $!, а статус возврата равен нулю.
Если задана опция -n, то wait ожидает завершения любого из заданных идентификаторов id или, если id не заданы, то любой отмены задания или процесса и возвращает статус завершения. Если ни один из предоставленных идентификаторов id не является дочерним для оболочки или если id не указаны и в оболочке нет не ожидаемых дочерних элементов, то статус выхода равен 127.
Если указана опция -p, то wait присваивает идентификатор процесса или задания, для которого возвращается статус завершения, переменной varname, указанной в аргументе опции. Переменная, которая не может быть доступна только для чтения, будет отключена изначально, перед любым назначением. Это полезно только при использовании с опцией -n.
Установка опции -f, когда включено управление заданиями, заставляет wait ожидать завершения каждого id, прежде чем возвращать его статус, вместо возврата при изменении статуса.
Если ни один из идентификаторов id не указывает ни на один из активных дочерних процессов оболочки, то возвращаемый статус равен 127. Если wait прерывается сигналом, то любое varname останется неустановленным, а статус возврата будет больше 128, как описано в разделе СИГНАЛЫ above. В противном случае возвращаемым статусом будет статус выхода последнего id.

РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ

В Bash-4.0 введена концепция "уровня совместимости с оболочкой" shell compatibility level, заданная как набор опций для встроенной команды 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.

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

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

ОГРАНИЧЕННАЯ ОБОЛОЧКА

Если bash запускается с названием rbash или при вызове указывается опция -r, то оболочка становится ограниченной restricted. Оболочка с ограниченным доступом используется для настройки окружающей среды, более контролируемой, чем в стандартной оболочке. Она ведет себя аналогично bash, за исключением того, что следующие действия запрещены или не выполняются:

  • Изменение каталогов с помощью cd.
  • Задание или отмена значений SHELL, PATH, HISTFILE, ENV или BASH_ENV.
  • Указание названий команд, содержащих /.
  • Указание названия файла, содержащего / в качестве аргумента встроенной команды ..
  • Использование опции -p для встроенной команды ., чтобы указать путь поиска.
  • Указание названия файла, содержащего косую черту, в качестве аргумента встроенной команды history.
  • Указание названия файла, содержащего косую черту, в качестве аргумента опции -p для встроенной команды hash.
  • Импорт определений функций из окружающей среды оболочки при запуске.
  • Анализ значений BASHOPTS и 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, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey)
Библиотека Readline Gnu, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey)
Библиотека истории Gnu, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey)
Интерфейс переносимой операционной системы (POSIX), часть 2: оболочка и утилиты, IEEE —
http://pubs.opengroup.org/onlinepubs/9799919799/
http://tiswww.case.edu/~chet/bash/POSIX — a description of posix mode
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). Фонд свободного программного обеспечения
bfox@gnu.org

Чет Рейми (Chet Ramey). Университет Case Western Reserve
chet.ramey@case.edu

СООБЩЕНИЯ ОБ ОШИБКАХ

Если вы обнаружите ошибку в bash, то просим сообщить нам об этом. Но сначала просим вас убедиться, что это действительно ошибка и что она присутствует в последней версии bash. Последняя версия всегда доступна на сайтах ftp://ftp.gnu.org/pub/gnu/bash/ и http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

Как только вы определите, что ошибка действительно существует, то используйте команду bashbug, чтобы отправить отчет об ошибке. Если у вас есть исправление, то просим вас также отправить его по электронной почте! Вы можете присылать предложения и “philosophical” сообщения об ошибках в bug-bash@gnu.org или опубликовывать их в группе новостей Usenet gnu.bash.bug.

ВСЕ сообщения об ошибках должны содержать:

Номер версии bash
Аппаратурные средства и операционную систему
Компилятор, используемый для компиляции
Описание поведения ошибки
Скрипт short или
“recipe” существующее исправление ошибки

bashbug автоматически вставляет первые три элемента в шаблон, который она предоставляет для отправки отчета об ошибке.

Комментарии и сообщения об ошибках, касающиеся этой страницы руководства, следует направлять chet.ramey@case.edu.

ОШИБКИ

Она слишком большая и слишком медленная.

Существуют некоторые небольшие различия между bash и традиционными версиями sh, в основном, это - из-за спецификации POSIX

В некоторых случаях использование псевдонимов приводит к путанице.

Встроенные в оболочку команды и функции не подлежат останову или перезапуску.

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

Переменные массива могут быть (пока) не экспортированы.

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Aleksandr Felda <isk8da@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.

07 апреля 2025 GNU Bash 5.3