bash - справочное руководство, опции, примеры команд


ИМЯ

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

СИНТАКСИС

bash [options] [command_string | file]

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

Bash защищен авторским правом (C) 1989-2020 Free Software Foundation, Inc.

ОПИСАНИЕ

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

Bash предназначен для реализации части Shell and Utilities спецификации IEEE POSIX (стандарт IEEE 1003.1). Bash по умолчанию можно настроить так, чтобы он был совместим с POSIX.

ПАРАМЕТРЫ

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

-c

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

-i

Если указан параметр -i, оболочка является интерактивной.

-l

Заставьте bash действовать так, как если бы он был вызван в качестве оболочки входа в систему (см. INVOCATION ниже).

-r

Если указан параметр -r, оболочка становится ограниченной (см. ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже).

-s

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

-D

Список всех строк в двойных кавычках, которым предшествует $, выводится на стандартный вывод. Это строки, которые подлежат языковому переводу, если текущая локаль не C или POSIX. Это подразумевает опцию -n; никакие команды выполняться не будут.

[-+]O [shopt_option]

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

--

-- сигнализирует об окончании опций и отключает дальнейшую обработку опций. Любые аргументы после -- рассматриваются как имена файлов и аргументы. Аргумент - эквивалентен --.

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

--debugger

Организуйте выполнение профиля отладчика до запуска оболочки. Включает расширенный режим отладки (см. описание параметра extdebug для встроенного shopt ниже).

--dump-po-strings

Эквивалентно -D, но вывод осуществляется в формате файла GNU gettext po (portable object).

--dump-strings

Эквивалент -D.

--help

Отобразите сообщение об использовании на стандартном выходе и успешно завершите работу.

--init-file file
--rcfile file

Выполнять команды из файла вместо стандартного персонального файла инициализации ~/.bashrc, если оболочка интерактивная (см. INVOCATION ниже).

--login

Эквивалентно -l.

--noediting

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

--noprofile

Не читайте ни общесистемный файл запуска  /etc/profile , ни какие-либо личные файлы инициализации ~/.bash_profile, ~/.bash_login или ~/.profile. По умолчанию bash считывает эти файлы при вызове в качестве оболочки входа в систему (см. INVOCATION ниже).

--norc

Не читайте и не выполняйте персональный файл инициализации ~/.bashrc, если оболочка является интерактивной. Этот параметр включен по умолчанию, если оболочка вызывается как sh.

--posix

Измените поведение bash, если операция по умолчанию отличается от стандарта POSIX, чтобы она соответствовала стандарту (режим posix). См. СМ. ТАКЖЕ ниже для ссылки на документ, в котором подробно описывается, как режим posix влияет на поведение bash.

--restricted

Оболочка становится ограниченной (см. ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже).

--verbose

Эквивалент -v.

--version

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

АРГУМЕНТЫ

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

ПРИЗЫВ

Оболочка входа — это оболочка, у которой первый символ нулевого аргумента — это -, или она начинается с параметра --login.

интерактивная оболочка запускается без аргументов, не являющихся параметрами (если не указано -s) и без параметра -c, стандартный ввод и ошибка оба подключены к терминалам (как определено isatty(3)), или один запущен с опцией -i.

PS1 установлен, а $- включает i, если bash является интерактивным, позволяя сценарию оболочки или файлу запуска проверить это состояние.

В следующих абзацах описывается, как bash выполняет файлы запуска. Если какой-либо из файлов существует, но не может быть прочитан, bash сообщает об ошибке. Тильды раскрываются в именах файлов, как описано ниже в разделе Расширение тильды в разделе РАСШИРЕНИЕ.

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login, она сначала считывает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке и читает и выполняет команды из первого существующего и доступного для чтения. Параметр --noprofile может использоваться при запуске оболочки, чтобы запретить такое поведение.

Когда интерактивная оболочка входа завершает работу или неинтерактивная оболочка входа выполняет встроенную команду exit, bash считывает и выполняет команды из файла ~/.bash_logout, если он существует.

Когда запускается интерактивная оболочка, не являющаяся оболочкой входа, bash считывает и выполняет команды из ~/.bashrc, если этот файл существует. Это можно предотвратить с помощью параметра --norc. Параметр --rcfile файл заставит bash читать и выполнять команды из файла вместо ~ /.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 определяет, что он запускается таким образом, он читает и выполняет команды из ~/.bashrc, если этот файл существует и доступен для чтения. Он не будет этого делать, если будет вызван как sh. Параметр --norc может использоваться для запрета такого поведения, а параметр --rcfile может использоваться для принудительного чтения другого файла, но ни rshd или sshd обычно вызывают оболочку с этими параметрами или разрешают их указывать.

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

ОПРЕДЕЛЕНИЯ

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

blank

Пробел или табуляция.

word

Последовательность символов, рассматриваемая оболочкой как единое целое. Также известен как токен.

name

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

metacharacter

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

| & ; ( ) < > space tab newline
control operator

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

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

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

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

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

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

Простые команды

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

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

Трубопроводы

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

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

Стандартный вывод command подключается через канал к стандартному вводу command2. Это подключение выполняется перед любыми перенаправлениями, указанными в команде (см. REDIRECTION ниже). Если используется |&, стандартная ошибка command, помимо стандартного вывода, соединяется со стандартным вводом command2 через трубка; это сокращение от 2>&1 |. Это неявное перенаправление стандартной ошибки на стандартный вывод выполняется после любых перенаправлений, указанных командой.

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

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

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

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

Списки

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

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

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

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

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

command1 && command2

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

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

command1 || command2

command2 выполняется тогда и только тогда, когда command1 возвращает ненулевой статус выхода. Статус возврата списков AND и OR — это статус выхода последней команды, выполненной в списке.

Составные команды

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

(list)

list выполняется в среде подоболочки (см. СРЕДА ВЫПОЛНЕНИЯ КОМАНД ниже). Присвоения переменных и встроенные команды, влияющие на среду оболочки, не остаются в силе после завершения команды. Статус возврата – это статус выхода из списка.

{ list; }

list просто выполняется в текущей среде оболочки. список должен заканчиваться новой строкой или точкой с запятой. Это называется групповая команда. Статус возврата — это статус выхода из списка. Обратите внимание, что в отличие от метасимволов ( и ), { и } являются зарезервированными словами. и должно происходить там, где разрешено распознавание зарезервированного слова. Поскольку они не вызывают разрыва слова, они должны быть отделены от списка пробелом или другим метасимволом оболочки.

((expression))

выражение оценивается в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКАЯ ВЫЧИСЛЕНИЕ. Если значение выражения не равно нулю, статус возврата равен 0; в противном случае возвращается статус 1. Это в точности эквивалентно let "expression".

[[ expression ]]

Возвращает статус 0 или 1 в зависимости от оценки условного выражения expression. Выражения состоят из основных элементов, описанных ниже в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ. Разделение слов и раскрытие пути не выполняются для слов между [[ и ]]; Выполняется расширение с помощью тильды, расширение параметров и переменных, арифметическое расширение, подстановка команд, подстановка процессов и удаление кавычек. Условные операторы, такие как -f, не должны быть заключены в кавычки, чтобы их можно было распознать как первичные.

При использовании с [[ операторы < и > сортируются лексикографически с использованием текущей локали.

При использовании операторов == и != строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в разделе Шаблон. Соответствие, как если бы была включена опция оболочки extglob. Оператор = эквивалентен ==. Если включена опция оболочки nocasematch, сопоставление выполняется без учета регистра буквенных символов. Возвращаемое значение равно 0, если строка соответствует (==) или не соответствует (!=) шаблону, и 1 в противном случае. Любая часть шаблона может быть заключена в кавычки, чтобы часть в кавычках соответствовала строке.

Доступен дополнительный бинарный оператор =~ с тем же приоритетом, что и == и !=. Когда он используется, строка справа от оператора считается расширенным регулярным выражением POSIX и сопоставляется соответствующим образом (с использованием интерфейсов POSIX regcomp и regexec, обычно описанных в регулярное выражение(3)). Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически неверно, возвращаемое значение условного выражения равно 2. Если параметр оболочки nocasematch включен, сопоставление выполняется без учета регистра буквенных символов. Любая часть шаблона может быть заключена в кавычки, чтобы часть в кавычках соответствовала строке. Со скобками в регулярных выражениях следует обращаться осторожно, так как обычные символы кавычек теряют свое значение между скобками. Если шаблон хранится в переменной оболочки, заключение в кавычки расширения переменной приводит к тому, что весь шаблон сопоставляется как строка.

Шаблон будет соответствовать, если он соответствует любой части строки. Привяжите шаблон с помощью операторов регулярных выражений ^ и $, чтобы он соответствовал всей строке. Переменная массива BASH_REMATCH записывает, какие части строки соответствуют шаблону. Элемент BASH_REMATCH с индексом 0 содержит часть строки, соответствующую всему регулярному выражению. Подстроки, соответствующие заключенным в скобки подвыражениям в регулярном выражении, сохраняются в оставшихся индексах BASH_REMATCH. Элемент BASH_REMATCH с индексом n — это часть строки, соответствующая n-му подвыражению в скобках.

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

( expression )

Возвращает значение выражения. Это может быть использовано для переопределения обычного приоритета операторов.

! expression

Истинно, если выражение ложно.

expression1 && expression2

Истинно, если и выражение1, и выражение2 истинны.

expression1 || expression2

Истинно, если истинно либо выражение1, либо выражение2.

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

for name [ [ in [ word ... ] ] ; ] do list ; done

Список слов, следующих за in, расширяется, создавая список элементов. Переменная name устанавливается для каждого элемента этого списка по очереди, и list выполняется каждый раз. Если in слово опущено, команда for выполняет list один раз для каждого заданного позиционного параметра (см. ПАРАМЕТРЫ ниже). Статус возврата — это статус выхода последней выполненной команды. Если раскрытие элементов, следующих за in, приводит к пустому списку, никакие команды не выполняются и статус возврата равен 0.

for (( expr1 ; expr2 ; expr3 )) ; do list ; done

Сначала вычисляется арифметическое выражение expr1 в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКОЕ ВЫЧИСЛЕНИЕ. Затем арифметическое выражение expr2 многократно вычисляется, пока не станет равным нулю. Каждый раз, когда выражение2 дает ненулевое значение, выполняется список и вычисляется арифметическое выражение выражение3. Если какое-либо выражение опущено, оно ведет себя так, как если бы оно оценивалось как 1. Возвращаемое значение — это статус выхода последней выполненной команды в списке или false, если какое-либо из выражений недопустимо.

select name [ in word ] ; do list ; done

Список слов, следующих за in, расширяется, создавая список элементов. Набор расширенных слов печатается на стандартной ошибке, каждому предшествует число. Если in слово опущено, распечатываются позиционные параметры (см. ПАРАМЕТРЫ ниже). Затем отображается приглашение PS3 и строка считывается из стандартного ввода. Если строка состоит из числа, соответствующего одному из отображаемых слов, то значение name устанавливается равным этому слову. Если строка пуста, снова отображаются слова и подсказка. Если EOF прочитан, команда завершается. Любое другое прочитанное значение приводит к тому, что для name устанавливается значение null. Прочитанная строка сохраняется в переменной REPLY. список выполняется после каждого выбора, пока не будет выполнена команда break. Статус выхода select — это статус выхода последней команды, выполненной в списке, или ноль, если никакие команды не выполнялись.

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

Команда case сначала расширяет слово и пытается сопоставить его с каждым шаблоном по очереди, используя правила сопоставления, описанные в разделе Сопоставление шаблонов. ниже. слово расширяется с помощью расширения с помощью тильды, расширения параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Каждый проверяемый шаблон раскрывается с помощью расширения с помощью тильды, расширения параметров и переменных, арифметического расширения, подстановки команд и подстановки процессов. Если включена опция оболочки nocasematch, сопоставление выполняется без учета регистра буквенных символов. Когда совпадение найдено, выполняется соответствующий список. Если используется оператор ;;, последующие сопоставления не предпринимаются после первого совпадения с шаблоном. Использование ;& вместо ;; приводит к тому, что выполнение продолжается с списком, связанным со следующим набором шаблонов. Использование ;;& вместо ;; заставляет оболочку проверить следующий список шаблонов в операторе, если он есть, и выполнить любой связанный список при успешном совпадении, продолжая выполнение оператора case, как если бы список шаблонов не совпадал. Статус выхода равен нулю, если ни один шаблон не соответствует. В противном случае это статус выхода последней команды, выполненной в списке.

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

Выполняется if список. Если его статус выхода равен нулю, выполняется тогда список. В противном случае каждый elif список выполняется по очереди, и если его статус выхода равен нулю, соответствующий тогда список выполняется, и команда завершается. В противном случае выполняется else список, если он присутствует. Статус выхода — это статус выхода последней выполненной команды или ноль, если ни одно из условий не проверено.

while list-1; do list-2; done
until list-1; do list-2; done

Команда while постоянно выполняет список list-2 до тех пор, пока последняя команда в списке list-1 возвращает нулевой статус выхода. Команда until идентична команде while, за исключением того, что проверка инвертируется: list-2 выполняется до тех пор, пока последняя команда в list-1 возвращает ненулевой статус выхода. Статус выхода команд while и until – это статус выхода последней команды, выполненной в списке-2, или ноль, если ни одна из них не выполнялась. .

Сопроцессы

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

Формат сопроцесса:

coproc [NAME] command [redirections]

Это создает сопроцесс с именем NAME. Если NAME не указано, по умолчанию используется имя COPROC. ИМЯ не нужно указывать, если команда является простой командой (см. выше); в противном случае оно интерпретируется как первое слово простой команды. Когда сопроцесс выполняется, оболочка создает переменную массива (см. раздел Массивы ниже) с именем ИМЯ в контексте выполняемой оболочки. Стандартный вывод command подключается через конвейер к файловому дескриптору в исполняемой оболочке, и этот файловый дескриптор назначается ИМЯ[0]. Стандартный ввод command подключается через конвейер к файловому дескриптору в исполняемой оболочке, и этот файловый дескриптор назначается ИМЯ[1]. Этот канал устанавливается до любых перенаправлений, указанных командой (см. REDIRECTION ниже). Дескрипторы файлов можно использовать в качестве аргументов для команд оболочки и перенаправлений с использованием стандартных расширений слов. Кроме созданных для выполнения подстановок команд и процессов, файловые дескрипторы недоступны в подоболочках. Идентификатор процесса оболочки, созданной для выполнения сопроцесса, доступен как значение переменной NAME_PID. Встроенная команда wait может использоваться для ожидания завершения сопроцесса.

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

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

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

fname () compound-command [redirection]
function fname [()] compound-command [redirection]

Это определяет функцию с именем fname. Зарезервированное слово функция не является обязательным. Если указано зарезервированное слово function, круглые скобки необязательны. тело функции представляет собой составную команду составная-команда (см. раздел Составные команды выше). Эта команда обычно представляет собой список команд между { и }, но может быть любой командой из списка Составные команды выше, за одним исключением: если функция используется зарезервированное слово, но круглые скобки не поставляются, фигурные скобки обязательны. составная-команда выполняется всякий раз, когда fname указывается как имя простой команды. В режиме posix fname должно быть действительным имя оболочки и не может быть именем одной из специальных встроенных функций POSIX. В режиме по умолчанию именем функции может быть любое слово оболочки без кавычек, не содержащее $. Любые перенаправления (см. ПЕРЕНАПРАВЛЕНИЕ ниже), указанные при определении функции, выполняются при выполнении функции. Статус выхода определения функции равен нулю, если только не возникает синтаксическая ошибка или функция только для чтения с таким именем уже не существует. При выполнении статус выхода функции — это статус выхода последней команды, выполненной в теле. (См. раздел ФУНКЦИИ ниже.)

КОММЕНТАРИИ

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

ЦИТАТА

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

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

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

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

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

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

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

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

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

\a

оповещение (звонок)

\b

назад

\e
\E

escape-символ

\f

подача формы

\n

новая линия

\r

возврат каретки

\t

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

\v

вертикальная вкладка

\\

обратная косая черта

\'

одинарная кавычка

\"

двойная кавычка

\?

вопросительный знак

\nnn

восьмибитный символ, значение которого представляет собой восьмеричное значение nnn (от одной до трех восьмеричных цифр)

\xHH

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

\uHHHH

символ Unicode (ISO/IEC 10646), значение которого представляет собой шестнадцатеричное значение HHHH (от одной до четырех шестнадцатеричных цифр)

\UHHHHHHHH

символ Unicode (ISO/IEC 10646), значение которого представляет собой шестнадцатеричное значение HHHHHHHH (от одной до восьми шестнадцатеричных цифр)

\cx

символ управления-x

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

Строка в двойных кавычках, перед которой стоит знак доллара ($"string"), приведет к переводу строки в соответствии с текущей локалью. Инфраструктура gettext выполняет поиск и преобразование в каталоге сообщений, используя переменные оболочки LC_MESSAGES и TEXTDOMAIN. Если текущая локаль C или POSIX или если нет доступных переводов, знак доллара игнорируется. Если строка переводится и заменяется, замена заключается в двойные кавычки.

ПАРАМЕТРЫ

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

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

переменная может быть назначена оператором формы

name=[value]

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

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

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

declare -n ref=$1

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

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

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

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

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

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

*

Расширяется до позиционных параметров, начиная с единицы. Когда раскрытие не заключено в двойные кавычки, каждый позиционный параметр раскрывается в отдельное слово. В контекстах, где это выполняется, эти слова подлежат дальнейшему разбиению на слова и расширению имени пути. Когда расширение происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенным первым символом специальной переменной IFS. То есть "$*" эквивалентно "$1c$2c ...", где c — первый символ значения переменной IFS. Если IFS не задан, параметры разделяются пробелами. Если IFS имеет значение null, параметры объединяются без промежуточных разделителей.

@

Расширяется до позиционных параметров, начиная с единицы. В контекстах, где выполняется разделение слов, это расширяет каждый позиционный параметр до отдельного слова; если не в двойных кавычках, эти слова подлежат разбиению на слова. В контекстах, где разделение слов не выполняется, оно расширяется до одного слова с каждым позиционным параметром, разделенным пробелом. Когда расширение происходит в двойных кавычках, каждый параметр расширяется до отдельного слова. То есть "$@" эквивалентно "$1" "$2"... Если расширение в двойных кавычках происходит внутри слова , расширение первого параметра соединяется с начальной частью исходного слова, а расширение последнего параметра соединяется с последней частью исходного слова. Если позиционные параметры отсутствуют, "$@" и $@ не заменяются (т. е. удаляются).

#

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

?

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

-

Заменяется текущими флагами параметров, указанными при вызове встроенной командой set или установленными самой оболочкой (например, параметром -i).

$

Заменяется идентификатором процесса оболочки. В подоболочке() он расширяется до идентификатора процесса текущей оболочки, а не подоболочки.

!

Заменяется идентификатором процесса последнего задания, которое было переведено в фоновый режим независимо от того, выполняется ли оно как асинхронная команда или с помощью встроенной команды bg (см. УПРАВЛЕНИЕ ЗАДАНИЯМИ ниже).

0

Заменяется на имя оболочки или сценария оболочки. Это устанавливается при инициализации оболочки. Если bash вызывается с файлом команд, $0 устанавливается на имя этого файла. Если bash запускается с параметром -c, то $0 устанавливается в первый аргумент после строки, которая должна быть выполнена, если она присутствует . В противном случае устанавливается имя файла, используемое для вызова bash, как указано нулевым аргументом.

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

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

_

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

BASH

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

BASHOPTS

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

BASHPID

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

BASH_ALIASES

Переменная ассоциативного массива, элементы которой соответствуют внутреннему списку псевдонимов, поддерживаемому встроенной функцией alias. Элементы, добавленные в этот массив, отображаются в списке псевдонимов; однако удаление элементов массива в настоящее время не приводит к удалению псевдонимов из списка псевдонимов. Если BASH_ALIASES не задан, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

BASH_ARGC

Переменная массива, значениями которой являются количество параметров в каждом кадре текущего стека вызовов выполнения bash. Количество параметров текущей подпрограммы (функции оболочки или сценария, выполняемого с помощью . или исходного кода) находится наверху стека. Когда подпрограмма выполняется, количество переданных параметров помещается в BASH_ARGC. Оболочка устанавливает BASH_ARGC только в расширенном режиме отладки (см. описание параметра extdebug для встроенной команды shop ниже). Установка extdebug после того, как оболочка начала выполнение скрипта, или ссылка на эту переменную, когда extdebug не установлена, могут привести к несогласованным значениям.

BASH_ARGV

Переменная массива, содержащая все параметры в текущем стеке вызовов выполнения bash. Последний параметр последнего вызова подпрограммы находится на вершине стека; первый параметр начального вызова находится внизу. При выполнении подпрограммы предоставленные параметры помещаются в BASH_ARGV. Оболочка устанавливает BASH_ARGV только в расширенном режиме отладки (см. описание параметра extdebug для встроенной команды shop ниже). Установка extdebug после того, как оболочка начала выполнение скрипта, или ссылка на эту переменную, когда extdebug не установлена, могут привести к несогласованным значениям.

BASH_ARGV0

При ссылке на эту переменную заменяется именем оболочки или сценария оболочки (идентично $0; см. описание специального параметра 0 выше). Присвоение BASH_ARGV0 приводит к тому, что присвоенное значение также присваивается $0. Если BASH_ARGV0 не установлен, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

BASH_CMDS

Переменная ассоциативного массива, элементы которой соответствуют внутренней хэш-таблице команд, поддерживаемой встроенной функцией hash. Элементы, добавляемые в этот массив, появляются в хеш-таблице; однако удаление элементов массива в настоящее время не приводит к удалению имен команд из хеш-таблицы. Если BASH_CMDS не установлен, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

BASH_COMMAND

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

BASH_EXECUTION_STRING

Аргумент команды для параметра вызова -c.

BASH_LINENO

Переменная массива, элементами которой являются номера строк в исходных файлах, где был вызван каждый соответствующий элемент FUNCNAME. $ {BASH_LINENO[$i]} – это номер строки в исходном файле ($ {BASH_SOURCE[<$i+1]}), где $ {FUNCNAME[$i ]} был вызван (или $ {BASH_LINENO[$i-1]}, если на него ссылается другая функция оболочки) . Используйте LINENO, чтобы получить номер текущей строки.

BASH_LOADABLES_PATH

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

BASH_REMATCH

Переменная массива, члены которой назначаются бинарным оператором =~ условной команде [[. Элемент с индексом 0 — это часть строки, соответствующая всему регулярному выражению. Элемент с индексом n — это часть строки, соответствующая n-ому подвыражению в скобках.

BASH_SOURCE

Переменная массива, элементами которой являются имена исходных файлов, в которых определены соответствующие имена функций оболочки в переменной массива FUNCNAME. Функция оболочки $ {FUNCNAME[$i]} определена в файле $ {BASH_SOURCE[$i]} и вызван из $ {BASH_SOURCE[$i+1 ]}.

BASH_SUBSHELL

Увеличивается на единицу в каждой подоболочке или среде подоболочки, когда оболочка начинает выполняться в этой среде. Начальное значение равно 0. Если BASH_SUBSHELL не установлен, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

BASH_VERSINFO

Переменная массива только для чтения, элементы которой содержат информацию о версии для этого экземпляра bash. Значения, присвоенные членам массива, следующие:

BASH_VERSINFO[0]

Основной номер версии (выпуск).

BASH_VERSINFO[1]

Дополнительный номер версии (версия).

BASH_VERSINFO[2]

Уровень патча.

BASH_VERSINFO[3]

Версия сборки.

BASH_VERSINFO[4]

Статус выпуска (например, beta1).

BASH_VERSINFO[5]

Значение MACHTYPE.

BASH_VERSION

Заменяется на строку, описывающую версию этого экземпляра bash.

COMP_CWORD

Индекс в $ {COMP_WORDS} слова, содержащего текущую позицию курсора. Эта переменная доступна только в функциях оболочки, вызываемых средствами программируемого завершения (см. Программируемое завершение ниже).

COMP_KEY

Клавиша (или конечная клавиша последовательности клавиш), используемая для вызова текущей функции завершения.

COMP_LINE

Текущая командная строка. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами программируемого завершения (см. Программируемое завершение ниже).

COMP_POINT

Индекс текущей позиции курсора относительно начала текущей команды. Если текущая позиция курсора находится в конце текущей команды, значение этой переменной равно $ {#COMP_LINE}. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами программируемого завершения (см. Программируемое завершение ниже).

COMP_TYPE

Установите целочисленное значение, соответствующее типу попытки завершения, вызвавшей вызов функции завершения: TAB, для нормального завершения, ?, для вывода списка завершений после последовательных вкладок, ! для списка вариантов частичного завершения слова, @ для списка вариантов завершения, если слово не изменено, или % для завершения меню. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами программируемого завершения (см. Программируемое завершение ниже).

COMP_WORDBREAKS

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

COMP_WORDS

Переменная-массив (см. Массивы ниже), состоящая из отдельных слов в текущей командной строке. Строка разбивается на слова так же, как readline разделяет ее, используя COMP_WORDBREAKS, как описано выше. Эта переменная доступна только в функциях оболочки, вызываемых средствами программируемого завершения (см. Программируемое завершение ниже).

COPROC

Переменная-массив (см. Массивы ниже), созданная для хранения файловых дескрипторов для вывода и ввода в безымянный сопроцесс (см. Сопроцессы выше).

DIRSTACK

Переменная массива (см. Массивы ниже), содержащая текущее содержимое стека каталогов. Каталоги отображаются в стеке в том порядке, в котором они отображаются встроенной функцией dirs. Назначение членам этой переменной массива может использоваться для изменения каталогов, уже находящихся в стеке, но для добавления и удаления каталогов необходимо использовать встроенные функции pushd и popd. Присвоение этой переменной не изменит текущий каталог. Если DIRSTACK не установлен, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

EPOCHREALTIME

При каждом обращении к этому параметру он расширяется до количества секунд, прошедших с эпохи Unix (см. время(3)) в виде значения с плавающей запятой с точностью до микросекунд. Назначения EPOCHREALTIME игнорируются. Если EPOCHREALTIME не установлено, оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.

EPOCHSECONDS

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

EUID

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

FUNCNAME

Переменная массива, содержащая имена всех функций оболочки, которые в настоящее время находятся в стеке вызовов выполнения. Элемент с индексом 0 — это имя любой выполняющейся в данный момент функции оболочки. Самый нижний элемент (тот, у которого самый высокий индекс) является «основным». Эта переменная существует только при выполнении функции оболочки. Назначения FUNCNAME не действуют. Если FUNCNAME не задано, оно теряет свои специальные свойства, даже если впоследствии будет сброшено.

Эту переменную можно использовать с BASH_LINENO и BASH_SOURCE. Каждый элемент FUNCNAME имеет соответствующие элементы в BASH_LINENO и BASH_SOURCE для описания стека вызовов. Например, $ {FUNCNAME[$i]} был вызван из файла $ {BASH_SOURCE[$i+1]} в строке с номером $ {BASH_LINENO[$i ]}. Встроенная функция caller отображает текущий стек вызовов, используя эту информацию.

GROUPS

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

HISTCMD

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

HOSTNAME

Автоматически устанавливается на имя текущего хоста.

HOSTTYPE

Автоматически устанавливается в строку, однозначно описывающую тип машины, на которой выполняется bash. Значение по умолчанию зависит от системы.

LINENO

При каждом обращении к этому параметру оболочка заменяет десятичное число, представляющее текущий последовательный номер строки (начиная с 1) внутри скрипта или функции. Если не в скрипте или функции, подставляемое значение не обязательно будет осмысленным. Если LINENO не установлен, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

MACHTYPE

Автоматически устанавливается в строку, полностью описывающую тип системы, на которой выполняется bash, в стандартном формате GNU cpu-company-system. Значение по умолчанию зависит от системы.

MAPFILE

Переменная-массив (см. Массивы ниже), созданная для хранения текста, прочитанного встроенным mapfile, когда имя переменной не указано.

OLDPWD

Предыдущий рабочий каталог, заданный командой cd.

OPTARG

Значение последнего аргумента option, обработанного встроенной командой getopts (см. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

OPTIND

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

OSTYPE

Автоматически устанавливается в строку, описывающую операционную систему, в которой выполняется bash. Значение по умолчанию зависит от системы.

PIPESTATUS

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

PPID

Идентификатор процесса родителя оболочки. Эта переменная доступна только для чтения.

PWD

Текущий рабочий каталог, заданный командой cd.

RANDOM

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

READLINE_LINE

Содержимое строкового буфера readline для использования с "bind -x" (см. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

READLINE_MARK

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

READLINE_POINT

Положение точки вставки в строковом буфере readline для использования с "bind -x" (см. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

REPLY

Задайте строку ввода, прочитанную встроенной командой read, когда аргументы не указаны.

SECONDS

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

SHELLOPTS

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

SHLVL

Увеличивается на единицу при каждом запуске экземпляра bash.

SRANDOM

Эта переменная расширяется до 32-битного псевдослучайного числа при каждом обращении к ней. Генератор случайных чисел не является линейным в системах, поддерживающих /dev/urandom или arc4random, поэтому каждое возвращаемое число не имеет отношения к предшествующим ему числам. Генератор случайных чисел не может быть заполнен, поэтому присвоения этой переменной не действуют. Если SRANDOM не установлен, он теряет свои специальные свойства, даже если впоследствии будет сброшен.

UID

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

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

BASH_COMPAT

Это значение используется для установки уровня совместимости оболочки. См. РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ ниже для описания различных уровней совместимости и их эффектов. Значение может быть десятичным числом (например, 4.2) или целым числом (например, 42), соответствующим желаемому уровню совместимости. Если BASH_COMPAT не установлен или задан как пустая строка, для текущей версии устанавливается уровень совместимости по умолчанию. Если для BASH_COMPAT задано значение, не соответствующее одному из допустимых уровней совместимости, оболочка выводит сообщение об ошибке и устанавливает уровень совместимости по умолчанию для текущей версии. Допустимые значения соответствуют уровням совместимости, описанным ниже в разделе

BSHELLСОВМЕСТИМОСТЬРЕЖИМ. Например, 4.2 и 42 являются допустимыми значениями, которые соответствуют параметру compat42 shop и задают уровень совместимости 42. Текущая версия также является допустимым значением.

BASH_ENV

Если этот параметр установлен, когда bash выполняет сценарий оболочки, его значение интерпретируется как имя файла, содержащего команды для инициализации оболочки, как в ~/.bashrc. Значение BASH_ENV подвергается расширению параметра, подстановке команд и арифметическому расширению, прежде чем интерпретируется как имя файла.

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

BASH_XTRACEFD

Если задано целое число, соответствующее действительному файловому дескриптору, bash запишет вывод трассировки, созданный, когда set -x включен, в этот файловый дескриптор. Дескриптор файла закрывается, когда BASH_XTRACEFD сбрасывается или ему присваивается новое значение. Отключение BASH_XTRACEFD или присвоение ему пустой строки приводит к тому, что вывод трассировки отправляется в стандартную ошибку. Обратите внимание, что установка для BASH_XTRACEFD значения 2 (стандартный дескриптор файла ошибки) и последующая его отмена приведет к закрытию стандартной ошибки.

CDPATH

Путь поиска для команды cd. Это разделенный двоеточием список каталогов, в которых оболочка ищет каталоги назначения, указанные командой cd. Пример значения: ".:~:/usr".

CHILD_MAX

Установите количество завершенных дочерних значений состояния, которые оболочка должна помнить. Bash не позволит уменьшить это значение ниже минимума, установленного POSIX, и существует максимальное значение (в настоящее время 8192), которое оно не может превышать. Минимальное значение зависит от системы.

COLUMNS

Используется составной командой select для определения ширины терминала при печати списков выбора. Устанавливается автоматически, если включена опция checkwinsize или в интерактивной оболочке при получении SIGWINCH.

COMPREPLY

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

EMACS

Если bash находит эту переменную в среде, когда оболочка запускается со значением "t", предполагается, что оболочка работает в буфере оболочки Emacs, и отключает редактирование строк.

ENV

Разворачивается и выполняется аналогично BASH_ENV (см. INVOCATION выше), когда интерактивная оболочка вызывается в режиме posix.

EXECIGNORE

Разделенный двоеточиями список шаблонов оболочки (см. Сопоставление шаблонов), определяющий список имен файлов, которые будут игнорироваться при поиске команд с использованием PATH. Файлы, полные пути которых соответствуют одному из этих шаблонов, не считаются исполняемыми файлами для завершения и выполнения команды через поиск PATH. Это не влияет на поведение команд [, test и [[. Полные пути в хэш-таблице команд не подлежат EXECIGNORE. Используйте эту переменную, чтобы игнорировать файлы общей библиотеки, для которых установлен бит исполняемого файла, но которые не являются исполняемыми файлами. Сопоставление с шаблоном учитывает настройку параметра оболочки extglob.

FCEDIT

Редактор по умолчанию для встроенной команды fc.

FIGNORE

Разделенный двоеточиями список суффиксов, которые следует игнорировать при завершении имени файла (см. READLINE ниже). Имя файла, суффикс которого совпадает с одной из записей в FIGNORE, исключается из списка совпадающих имен файлов. Пример значения: ".o:~".

FUNCNEST

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

GLOBIGNORE

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

HISTCONTROL

Разделенный двоеточием список значений, определяющих способ сохранения команд в списке истории. Если список значений включает игнорировать пробел, строки, начинающиеся с символа пробел, не сохраняются в списке истории. Значение ignoredups приводит к тому, что строки, совпадающие с предыдущей записью в истории, не сохраняются. Значение ignoreboth является сокращением для ignorespace и ignoredups. Значение erasedups приводит к тому, что все предыдущие строки, совпадающие с текущей строкой, удаляются из списка истории перед сохранением этой строки. Любое значение, не входящее в приведенный выше список, игнорируется. Если HISTCONTROL не установлен или не содержит допустимого значения, все строки, прочитанные синтаксическим анализатором оболочки, сохраняются в списке истории с учетом значения HISTIGNORE. Вторая и последующие строки многострочной составной команды не проверяются и добавляются в историю независимо от значения HISTCONTROL.

HISTFILE

Имя файла, в котором сохраняется история команд (см. HISTORY ниже). Значение по умолчанию: ~/.bash_history. Если не установлено, история команд не сохраняется при выходе из оболочки.

HISTFILESIZE

Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, файл истории при необходимости усекается, чтобы содержать не более указанного количества строк, путем удаления самых старых записей. Файл истории также усекается до этого размера после его записи при выходе из оболочки. Если значение равно 0, файл истории усекается до нулевого размера. Нечисловые значения и числовые значения меньше нуля запрещают усечение. Оболочка устанавливает значение по умолчанию в значение HISTSIZE после чтения любых файлов запуска.

HISTIGNORE

Разделенный двоеточиями список шаблонов, используемый для определения того, какие командные строки следует сохранить в списке истории. Каждый шаблон привязывается к началу строки и должен соответствовать всей строке (без добавления неявного `*'). Каждый шаблон проверяется на линии после применения проверок, указанных в HISTCONTROL. В дополнение к обычным символам соответствия шаблону оболочки, `&' соответствует предыдущей строке истории. `&' можно экранировать с помощью обратной косой черты; обратная косая черта удаляется перед попыткой сопоставления. Вторая и последующие строки многострочной составной команды не проверяются и добавляются в историю независимо от значения HISTIGNORE. Сопоставление с шаблоном учитывает настройку параметра оболочки extglob.

HISTSIZE

Количество команд, которые необходимо запомнить в истории команд (см. HISTORY ниже). Если значение равно 0, команды не сохраняются в списке истории. Числовые значения меньше нуля приводят к тому, что каждая команда сохраняется в списке истории (ограничений нет). Оболочка устанавливает значение по умолчанию 500 после чтения любых файлов запуска.

HISTTIMEFORMAT

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

HOME

Домашний каталог текущего пользователя; аргумент по умолчанию для встроенной команды cd. Значение этой переменной также используется при расширении с помощью тильды.

HOSTFILE

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

IFS

Внутренний разделитель полей, который используется для разделения слов после расширения и для разделения строк на слова с помощью встроенной команды read. Значение по умолчанию: ``<space><tab><newline>''.

IGNOREEOF

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

INPUTRC

Имя файла запуска readline вместо значения по умолчанию  ~/.inputrc  (см. READLINE ниже).

INSIDE_EMACS

Если эта переменная появляется в среде при запуске оболочки, bash предполагает, что она выполняется внутри буфера оболочки Emacs, и может отключить редактирование строк, в зависимости от значения TERM.

LANG

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

LC_ALL

Эта переменная имеет приоритет над значением LANG и любой другой переменной LC_, определяющей категорию локали.

LC_COLLATE

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

LC_CTYPE

Эта переменная определяет интерпретацию символов и поведение классов символов при раскрытии пути и сопоставлении с образцом.

LC_MESSAGES

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

LC_NUMERIC

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

LC_TIME

Эта переменная определяет категорию локали, используемую для форматирования данных и времени.

LINES

Используется составной командой select для определения длины столбца для печати списков выбора. Устанавливается автоматически, если включена опция checkwinsize или в интерактивной оболочке при получении SIGWINCH.

MAIL

Если в этом параметре указано имя файла или каталога, а переменная MAILPATH не задана, bash информирует пользователя о приходе почты в указанном файле или Maildir-формате. каталог.

MAILCHECK

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

MAILPATH

Разделенный двоеточием список имен файлов, которые нужно проверять на наличие почты. Сообщение, которое должно быть напечатано, когда почта приходит в конкретный файл, может быть определено путем отделения имени файла от сообщения знаком `?'. При использовании в тексте сообщения $_ заменяется на имя текущего почтового файла. Пример:

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

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

/var/mail/$USER
OPTERR

Если установлено значение 1, bash отображает сообщения об ошибках, созданные встроенной командой getopts (см. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

OPTERR инициализируется значением 1 каждый раз, когда вызывается оболочка или выполняется сценарий оболочки.

PATH

Путь поиска команд. Это разделенный двоеточием список каталогов, в которых оболочка ищет команды (см. ниже ВЫПОЛНЕНИЕ КОМАНД). Имя каталога нулевой длины (null) в значении PATH указывает на текущий каталог. Пустое имя каталога может отображаться в виде двух соседних двоеточий, начального или конечного двоеточия. Путь по умолчанию зависит от системы и задается администратором, устанавливающим bash. Общее значение

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
POSIXLY_CORRECT

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

PROMPT_COMMAND

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

PROMPT_DIRTRIM

Если задано число больше нуля, это значение используется как количество завершающих компонентов каталога, которые необходимо сохранить при развертывании экранов строк приглашения \w и \W (см. ПОДСКАЗКИ ниже). Удаленные символы заменяются многоточием.

PS0

Значение этого параметра расширяется (см. ниже ЗАПРОСЫ) и отображается интерактивными оболочками после чтения команды и перед ее выполнением.

PS1

Значение этого параметра расширяется (см. ЗАПРОС ниже) и используется в качестве основной строки приглашения. Значение по умолчанию: ``\s-\v\$''.

PS2

Значение этого параметра расширяется, как и в случае с PS1, и используется в качестве дополнительной строки приглашения. По умолчанию используется ``> ''.

PS3

Значение этого параметра используется в качестве подсказки для команды select (см. выше GRAMMAR SHELL).

PS4

Значение этого параметра расширяется, как и в случае с PS1, и значение печатается перед отображением каждой команды bash во время трассировки выполнения. Первый символ развернутого значения PS4 при необходимости реплицируется несколько раз, чтобы указать несколько уровней косвенности. По умолчанию используется ``+ ''.

SHELL

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

TIMEFORMAT

Значение этого параметра используется в качестве строки формата, указывающей, как должна отображаться информация о времени для конвейеров с префиксом time зарезервированного слова. Символ % вводит escape-последовательность, которая расширяется до значения времени или другой информации. Управляющие последовательности и их значения следующие; фигурные скобки обозначают необязательные части.

%%

Буквальный %.

%[p][l]R

Прошедшее время в секундах.

%[p][l]U

Количество секунд ЦП, проведенных в пользовательском режиме.

%[p][l]S

Количество секунд ЦП, проведенных в системном режиме.

%P

Процент ЦП, вычисляемый как (%U + %S)/%R.

Необязательный параметр p – это цифра, указывающая точность, количество дробных цифр после запятой. Значение 0 приводит к тому, что десятичная точка или дробь не выводятся. Можно указать не более трех знаков после запятой; значения p больше 3 изменяются на 3. Если p не указано, используется значение 3.

Необязательный l указывает более длинный формат, включая минуты, в формате MMmSS.FFs. Значение p определяет, включена ли дробь.

Если эта переменная не установлена, bash действует так, как если бы она имела значение $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. . Если значение равно null, информация о времени не отображается. При отображении строки формата добавляется завершающая новая строка.

TMOUT

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

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

TMPDIR

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

auto_resume

Эта переменная управляет тем, как оболочка взаимодействует с пользователем и управлением заданиями. Если эта переменная установлена, простые команды из одного слова без перенаправления рассматриваются как кандидаты на возобновление существующего остановленного задания. Не допускается двусмысленность; если имеется несколько заданий, начинающихся с введенной строки, выбирается задание, к которому обращались последним. имя остановленного задания в данном контексте — это командная строка, используемая для его запуска. Если задано значение exact, предоставленная строка должна точно совпадать с именем остановленного задания; если задано значение substring, предоставленная строка должна совпадать с подстрокой имени остановленного задания. Значение substring обеспечивает функциональность, аналогичную идентификатору задания %? (см. УПРАВЛЕНИЕ ЗАДАНИЯМИ ниже). Если установлено любое другое значение, предоставленная строка должна быть префиксом имени остановленного задания; это обеспечивает функциональность, аналогичную идентификатору задания %string.

histchars

Два или три символа, управляющие расширением истории и токенизацией (см. РАСШИРЕНИЕ ИСТОРИИ ниже). Первый символ — это символ расширения истории, сигнализирующий о начале расширения истории, обычно `!'. Второй символ — это символ быстрой замены, который используется в качестве сокращения для повторного запуска предыдущей введенной команды, заменяя одну строку на другую в команде. По умолчанию используется `^'. Необязательный третий символ — это символ, указывающий, что оставшаяся часть строки является комментарием, если он находится в качестве первого символа слова, обычно это `#'. Символ комментария к истории приводит к тому, что подстановка истории для оставшихся слов в строке пропускается. Это не обязательно заставляет синтаксический анализатор интерпретировать оставшуюся часть строки как комментарий.

Массивы

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

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

Ассоциативные массивы создаются с помощью declare -A name.

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

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

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

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

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

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

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

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

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

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

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

РАСШИРЕНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

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}, отображается на выходе точно так же. То же слово выводится как file1 file2 после расширения с помощью bash. Если требуется строгая совместимость с sh, запустите bash с помощью параметра +B или отключите раскрытие скобок с помощью +B. > для команды set (см. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).

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

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

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

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

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

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

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

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

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

${parameter}

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

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

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

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

${parameter:-word}

Использовать значения по умолчанию. Если параметр не задан или равен нулю, подставляется расширение word. В противном случае подставляется значение параметра.

${parameter:=word}

Назначить значения по умолчанию. Если параметр не установлен или имеет значение null, расширение слова назначается параметру. Затем подставляется значение параметра. Позиционные параметры и специальные параметры не могут быть назначены таким образом.

${parameter:?word}

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

${parameter:+word}

Использовать альтернативное значение. Если параметр имеет значение null или не установлен, ничего не заменяется, в противном случае заменяется расширение слова.

${parameter:offset}
${parameter:offset:length}

Расширение подстроки. Расширяется до длины символов значения параметра, начиная с символа, указанного смещением. Если параметр имеет значение @, индексированный массив с индексом @ или * или ассоциативное имя массива, результаты отличаются, как описано ниже. Если length опущен, расширяется до подстроки значения параметра, начиная с символа, указанного смещением, и доходит до конца значения. . length и offset – это арифметические выражения (см. ниже АРИФМЕТИЧЕСКОЕ ВЫЧИСЛЕНИЕ).

Если смещение оценивается как число меньше нуля, значение используется как смещение в символах от конца значения параметра. Если length оценивается как число меньше нуля, оно интерпретируется как смещение в символах от конца значения параметра, а не как количество символов, и расширение — это символы между offset и этим результатом. Обратите внимание, что отрицательное смещение должно быть отделено от двоеточия хотя бы одним пробелом, чтобы его не спутали с расширением :-.

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

Если параметр – это имя индексированного массива с индексом @ или *, результатом будет длина элементов массива, начинающихся с $ {параметр. [смещение]}. Отрицательное смещение берется относительно единицы, превышающей максимальный индекс указанного массива. Это ошибка раскрытия, если length оценивается как число меньше нуля.

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

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

${!prefix*}
${!prefix@}

Имена, соответствующие префиксу. Заменяется на имена переменных, имена которых начинаются с префикса, разделенные первым символом

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

${!name[@]}
${!name[*]}

Список ключей массива. Если name является переменной массива, расширяется до списка индексов (ключей) массива, назначенных в name. Если name не является массивом, расширяется до 0, если name задано, и null в противном случае. Когда используется @ и расширение появляется в двойных кавычках, каждая клавиша заменяется на отдельное слово.

${#parameter}

Длина параметра. Подставляется длина в символах значения параметра. Если параметр равен * или @, подставляемое значение представляет собой количество позиционных параметров. Если параметр – это имя массива с индексом * или @, подставляемое значение – это количество элементов в массиве. Если параметр представляет собой имя индексированного массива с отрицательным числом в индексе, это число интерпретируется как относительное на единицу большее, чем максимальный индекс параметра, поэтому отрицательные индексы отсчитываются от конец массива, а индекс -1 указывает на последний элемент.

${parameter#word}
${parameter##word}

Удалить соответствующий шаблон префикса. слово расширяется для создания шаблона, как и в расширении пути, и сопоставляется с расширенным значением параметра с использованием правил, описанных в разделе Сопоставление шаблона. ниже. Если шаблон совпадает с началом значения параметра, то результатом расширения является расширенное значение параметра с кратчайшим совпадающим шаблоном (`` Случай #'') или самый длинный совпадающий шаблон (случай ``##'') удален. Если параметр имеет значение @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, а расширение представляет собой результирующий список. Если параметр является переменной массива с индексом @ или *, операция удаления шаблона применяется к каждому члену массива по очереди, а расширение является результирующим списком.

${parameter%word}
${parameter%%word}

Удалить соответствующий шаблон суффикса. слово расширяется для создания шаблона, как и в расширении пути, и сопоставляется с расширенным значением параметра с использованием правил, описанных в разделе Сопоставление шаблона. ниже. Если шаблон соответствует конечной части расширенного значения параметра, то результатом расширения является расширенное значение параметра с кратчайшим совпадающим шаблоном (``%'') или самый длинный совпадающий шаблон (вариант ``%%'') удален. Если параметр имеет значение @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, а расширение представляет собой результирующий список. Если параметр является переменной массива с индексом @ или *, операция удаления шаблона применяется к каждому члену массива по очереди, а расширение является результирующим списком.

${parameter/pattern/string}

Подстановка шаблона. шаблон расширяется, чтобы создать шаблон, как и в расширении пути, параметр расширяется, и самое длинное совпадение шаблона с его значением заменяется на строка. Сопоставление выполняется с использованием правил, описанных в разделе Сопоставление с образцом ниже. Если шаблон начинается с /, все совпадения с шаблоном заменяются строкой. Обычно заменяется только первое совпадение. Если шаблон начинается с #, он должен совпадать с началом расширенного значения параметра. Если шаблон начинается с %, он должен соответствовать концу расширенного значения параметра. Если строка имеет значение null, совпадения с шаблоном удаляются, а / следующий за ним шаблон может быть опущен. Если включена опция оболочки nocasematch, сопоставление выполняется без учета регистра буквенных символов. Если параметр равен @ или *, операция подстановки применяется к каждому позиционному параметру по очереди, а расширение представляет собой результирующий список. Если параметр является переменной массива с индексом @ или *, операция подстановки применяется к каждому элементу массива по очереди, а расширение результирующий список.

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

Изменение регистра. Это расширение изменяет регистр буквенных символов в параметре. Шаблон расширяется для создания шаблона, как и в расширении имени пути. Каждый символ в расширенном значении параметра проверяется на соответствие шаблону, и, если он соответствует шаблону, его регистр преобразуется. Шаблон не должен пытаться соответствовать более чем одному символу. Оператор ^ преобразует строчные буквы, соответствующие шаблону, в прописные; оператор , преобразует совпадающие прописные буквы в строчные. Расширения ^^ и ,, преобразуют каждый соответствующий символ в расширенное значение; расширения ^ и , соответствуют и преобразуют только первый символ в расширенном значении. Если шаблон опущен, он обрабатывается как ?, который соответствует каждому символу. Если параметр имеет значение @ или *, операция изменения регистра применяется к каждому позиционному параметру по очереди, а расширение представляет собой результирующий список. Если параметр является переменной массива с индексом @ или *, операция изменения регистра применяется к каждому элементу массива по очереди, и расширение является результирующим списком.

${parameter@operator}

Преобразование параметров. Расширение представляет собой либо преобразование значения параметра, либо информацию о самом параметре, в зависимости от значения operator. Каждый оператор представляет собой одну букву:

U

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

u

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

L

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

Q

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

E

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

P

Расширение представляет собой строку, которая является результатом расширения значения параметра, как если бы это была строка приглашения (см. ЗАПРОС ниже).

A

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

K

Создает версию значения параметра, возможно заключенную в кавычки, за исключением того, что она печатает значения индексированного и ассоциативного массивов в виде последовательности пар ключ-значение в кавычках (см. Массивы выше ).

a

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

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

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

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

Подстановка команд позволяет в выводе команды заменить имя команды. Есть две формы:

$(command)

или

`command`

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

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

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

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

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

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

$((expression))

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

Оценка выполняется в соответствии с правилами, перечисленными ниже в разделе АРИФМЕТИЧЕСКАЯ ОЦЕНКА. Если выражение недопустимо, bash выводит сообщение о сбое и подстановки не происходит.

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

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

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

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

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

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

Явные нулевые аргументы ( " " или  ' ' ) сохраняются и передаются командам в виде пустых строк. Неявные аргументы NULL без кавычек, возникающие в результате раскрытия параметров, не имеющих значений, удаляются. Если параметр без значения раскрывается в двойных кавычках, получается нулевой аргумент, который сохраняется и передается команде в виде пустой строки. Когда аргумент null в кавычках появляется как часть слова, раскрытие которого не равно null, аргумент null удаляется. То есть слово -d' ' становится -d после разбиения на слова и удаления нулевого аргумента.

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

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

После разделения слов, если не установлен параметр -f, bash сканирует каждое слово на наличие символов *, ? и [. Если один из этих символов появляется и не заключен в кавычки, то слово рассматривается как шаблон и заменяется отсортированным по алфавиту списком имен файлов, соответствующих шаблону (см. Сопоставление шаблона). > ниже). Если совпадающие имена файлов не найдены и параметр оболочки nullglob не включен, слово остается без изменений. Если установлен параметр nullglob и совпадений не найдено, слово удаляется. Если параметр оболочки failglob установлен и совпадений не найдено, выводится сообщение об ошибке и команда не выполняется. Если опция оболочки nocaseglob включена, сопоставление выполняется без учета регистра буквенных символов. Когда шаблон используется для расширения имени пути, символ ``.'' в начале имени или сразу после косой черты должен соответствовать явно, если только параметр оболочки dotglob установлено. Имена файлов ``.'' и ``..'' всегда должны явно совпадать, даже если установлен dotglob. В других случаях символ ``.'' специально не обрабатывается. При сопоставлении имени пути символ косой черты всегда должен явно сопоставляться с косой чертой в шаблоне, но в других контекстах сопоставления ему может соответствовать специальный символ шаблона, как описано ниже в разделе Сопоставление шаблона. См. описание shopt ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ для описания nocaseglob, nullglob, параметры оболочки failglob и dotglob.

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

GLOBIGNORE не установлен. Сопоставление с шаблоном учитывает настройку параметра оболочки extglob.

Сопоставление с образцом

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

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

*

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

?

Соответствует любому одиночному символу.

[...]

Соответствует любому из заключенных символов. Пара символов, разделенных дефисом, обозначает выражение диапазона; любой символ, который находится между этими двумя символами включительно, с использованием последовательности сортировки и набора символов текущей локали, сопоставляется. Если первым символом, следующим за [, является ! или ^, то сопоставляется любой не заключенный в него символ. Порядок сортировки символов в выражениях диапазона определяется текущей локалью и значениями переменных оболочки LC_COLLATE или LC_ALL, если они установлены. Чтобы получить традиционную интерпретацию выражений диапазона, где [a-d] эквивалентно [abcd], установите значение переменной оболочки LC_ALL в C или включите параметр оболочки globasciiranges. - можно сопоставить, включив его в качестве первого или последнего символа в наборе. ] можно сопоставить, включив его в качестве первого символа в набор.

Внутри [ и ] классы символов можно указать с помощью синтаксиса [:класс :], где класс — один из следующих классов, определенных в стандарте POSIX:

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit

Класс символов соответствует любому персонажу, принадлежащему к этому классу. Класс символов word соответствует буквам, цифрам и символу _.

Внутри [ и ] класс эквивалентности можно указать с помощью синтаксиса [=c.=], что соответствует всем символам с тем же весом сопоставления (как определено текущим языковым стандартом), что и символ c.

Внутри [ и ] синтаксис [.символ.] соответствует сортировке символ символ.

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

?(pattern-list )

Соответствует нулю или одному вхождению заданных шаблонов

*(pattern-list )

Соответствует нулю или более вхождений заданных шаблонов

+(pattern-list )

Соответствует одному или нескольким вхождениям заданных шаблонов

@(pattern-list )

Соответствует одному из заданных шаблонов

!(pattern-list )

Соответствует чему угодно, кроме одного из заданных шаблонов

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

Удаление цитаты

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

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

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

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

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

Слово, следующее за оператором перенаправления в следующих описаниях, если не указано иное, подвергается раскрытию фигурных скобок, расширению с помощью тильды, расширению параметров и переменных, подстановке команд, арифметическому расширению, удалению кавычек, расширению имени пути и разбиению слов. Если оно расширяется до более чем одного слова, 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

Если хост — допустимое имя хоста или интернет-адрес, а порт — целочисленный номер порта или имя службы, bash пытается открыть соответствующий сокет TCP. .

/dev/udp/host/port

Если хост является допустимым именем хоста или интернет-адресом, а порт – целочисленным номером порта или именем службы, bash пытается открыть соответствующий сокет UDP. .

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

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

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

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

Общий формат перенаправления ввода:

[n]<word

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

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

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

[n]>word

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

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

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

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

[n]>>word

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

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

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

&>word

и

>&word

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

>word 2>&1

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

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

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

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

&>>word

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

>>word 2>&1

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

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

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

Формат здесь-документов:

[n]<<[-]word
        here-document
delimiter

Для слова не выполняется раскрытие параметров и переменных, подстановка команд, арифметическое расширение или расширение имени пути. Если какая-либо часть слова заключена в кавычки, разделитель является результатом удаления кавычек из слова, а строки в здесь-документе не расширен. Если слово не заключено в кавычки, все строки здесь-документа подвергаются расширению параметров, подстановке команд и арифметическому расширению, последовательность символов \<newline> игнорируется, и \ должен использоваться для заключения в кавычки символов \, $ и `.

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

Здесь строки

Вариант здесь документов, формат такой:

[n]<<<word

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

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

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

[n]<&word

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

Оператор

[n]>&word

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

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

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

[n]<&digit-

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

Точно так же оператор перенаправления

[n]>&digit-

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

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

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

[n]<>word

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

Псевдонимы

Псевдонимы позволяют заменить слово строкой, если оно используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые можно устанавливать и сбрасывать с помощью встроенных команд alias и unalias (см. ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Первое слово каждой простой команды, если оно не заключено в кавычки, проверяется на наличие псевдонима. Если да, то это слово заменяется текстом псевдонима. Символы /, $, ` и =, а также любые метасимволы оболочки или перечисленные выше символы в кавычках могут не отображаться в псевдониме. Текст замены может содержать любой допустимый ввод оболочки, включая метасимволы оболочки. Первое слово замещающего текста проверяется на псевдонимы, но слово, идентичное расширяемому псевдониму, не расширяется во второй раз. Это означает, что можно использовать псевдоним ls для ls -F, например, и bash не пытается рекурсивно расширять замещающий текст. Если последним символом значения псевдонима является пробел, то следующее командное слово, следующее за псевдонимом, также проверяется на раскрытие псевдонима.

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

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

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

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

Почти во всех случаях псевдонимы заменяются функциями оболочки.

ФУНКЦИИ

Функция оболочки, определенная, как описано выше в разделе SHELL GRAMMAR, сохраняет последовательность команд для последующего выполнения. Когда имя функции оболочки используется как простое имя команды, выполняется список команд, связанных с этим именем функции. Функции выполняются в контексте текущей оболочки; для их интерпретации не создается новый процесс (в отличие от выполнения сценария оболочки). Когда функция выполняется, аргументы функции становятся позиционными параметрами во время ее выполнения. Специальный параметр # обновляется, чтобы отразить изменение. Специальный параметр 0 остается без изменений. Первый элемент переменной FUNCNAME задается именем функции во время ее выполнения.

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

Локальные переменные функции могут быть объявлены с помощью встроенной команды local. Обычно переменные и их значения совместно используются функцией и ее вызывающей стороной. Если переменная объявлена local, видимая область видимости переменной ограничена этой функцией и ее дочерними элементами (включая функции, которые она вызывает). Локальные переменные «теневые» переменные с тем же именем, объявленные в предыдущих областях. Например, локальная переменная, объявленная в функции, скрывает глобальную переменную с тем же именем: ссылки и присваивания ссылаются на локальную переменную, оставляя глобальную переменную неизменной. Когда функция возвращается, глобальная переменная снова становится видимой.

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

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

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

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

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

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

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

АРИФМЕТИЧЕСКАЯ ОЦЕНКА

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

id++ id--

переменный постинкремент и постдекремент

- +

унарный минус и плюс

++id --id

переменный преинкремент и предекремент

! ~

логическое и побитовое отрицание

**

возведение в степень

* / %

умножение, деление, остаток

+ -

сложение, вычитание

<< >>

побитовые сдвиги влево и вправо

<= >= < >

сравнение

== !=

равенство и неравенство

&

побитовое И

^

побитовое исключающее ИЛИ

|

побитовое ИЛИ

&&

логическое И

||

логическое ИЛИ

expr?expr:expr

условный оператор

= *= /= %= += -= <<= >>= &= ^= |=

назначение

expr1 , expr2

запятая

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

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

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

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

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

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

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

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

-a file

Истинно, если файл существует.

-b file

Истинно, если файл существует и является блочным специальным файлом.

-c file

Истинно, если файл существует и является специальным символьным файлом.

-d file

Истинно, если файл существует и является каталогом.

-e file

Истинно, если файл существует.

-f file

Истинно, если файл существует и является обычным файлом.

-g file

Истинно, если файл существует и имеет идентификатор set-group-id.

-h file

Истинно, если файл существует и является символической ссылкой.

-k file

Истинно, если файл существует и установлен его ``липкий'' бит.

-p file

Истинно, если файл существует и является именованным каналом (FIFO).

-r file

Истинно, если файл существует и доступен для чтения.

-s file

Истинно, если файл существует и имеет размер больше нуля.

-t fd

Истинно, если файловый дескриптор fd открыт и ссылается на терминал.

-u file

Истинно, если файл существует и установлен его бит set-user-id.

-w file

Истинно, если файл существует и доступен для записи.

-x file

Истинно, если файл существует и является исполняемым.

-G file

Истинно, если файл существует и принадлежит действующему идентификатору группы.

-L file

Истинно, если файл существует и является символической ссылкой.

-N file

Истинно, если файл существует и был изменен с момента последнего чтения.

-O file

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

-S file

Истинно, если файл существует и является сокетом.

file1 -ef file2

Истинно, если file1 и file2 относятся к одному и тому же устройству и номеру inode.

file1 -nt file2

Истинно, если файл1 новее (согласно дате изменения), чем файл2, или если файл1 существует, а файл2 отсутствует .

file1 -ot file2

Истина, если файл1 старше, чем файл2, или если файл2 существует, а файл1 — нет.

-o optname

Истинно, если параметр оболочки optname включен. См. список параметров под описанием параметра -o встроенной команды set ниже.

-v varname

Истинно, если переменная оболочки varname установлена (ей присвоено значение).

-R varname

Истинно, если переменная оболочки varname установлена и является ссылкой на имя.

-z string

Истинно, если длина string равна нулю.

string
-n string

Истинно, если длина string не равна нулю.

string1 == string2
string1 = string2

Истинно, если строки равны. = следует использовать с командой test для соответствия POSIX. При использовании с командой [[ выполняется сопоставление с образцом, как описано выше (Составные команды).

string1 != string2

Истинно, если строки не равны.

string1 < string2

Истинно, если string1 сортируется перед string2 лексикографически.

string1 > string2

Истинно, если string1 сортируется после string2 лексикографически.

arg1 OP arg2

OP является одним из -eq, -ne, -lt, -le , -gt или -ge. Эти арифметические бинарные операторы возвращают значение true, если arg1 равен, не равен, меньше, меньше или равен, больше или больше или равен arg2, соответственно. Arg1 и arg2 могут быть положительными или отрицательными целыми числами. При использовании с командой [[ Arg1 и Arg2 вычисляются как арифметические выражения (см. АРИФМЕТИЧЕСКОЕ ВЫЧИСЛЕНИЕ выше). .

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

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

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

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

  3. Перенаправления выполняются, как описано выше в разделе ПЕРЕНАПРАВЛЕНИЕ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • текущий рабочий каталог, заданный cd, pushd или popd, или унаследованный оболочкой при вызове

  • маска режима создания файла, заданная umask или унаследованная от родителя оболочки

  • текущие ловушки, установленные trap

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

  • функции оболочки, определенные во время выполнения или унаследованные от родителя оболочки в среде

  • параметры, включенные при вызове (либо по умолчанию, либо с помощью аргументов командной строки) или с помощью set

  • параметры, включенные shop

  • псевдонимы оболочки, определенные с помощью alias

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

  • открытые файлы оболочки, а также любые модификации и дополнения, указанные перенаправлением на команду

  • текущий рабочий каталог

  • маска режима создания файла

  • переменные оболочки и функции, помеченные для экспорта, вместе с переменными, экспортируемыми для команды, передаваемой в среде

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

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

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

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

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

СРЕДА

Когда программа вызывается, ей передается массив строк, который называется environment. Это список пар имя-значение в форме имя=значение.

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

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

Если установлен параметр -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 игнорирует SIGQUIT. Если действует управление заданиями, bash игнорирует SIGTTIN, SIGTTOU и SIGTSTP.

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

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

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

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

КОНТРОЛЬ ЗАДАЧ

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

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

[1] 25647

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

Чтобы упростить реализацию пользовательского интерфейса для управления заданиями, операционная система поддерживает понятие идентификатора группы процессов текущего терминала. Члены этой группы процессов (процессы, идентификатор группы процессов которых равен текущему идентификатору группы процессов терминала) получают сигналы, генерируемые клавиатурой, такие как SIGINT. Говорят, что эти процессы находятся на переднем плане. Фоновые процессы — это процессы, идентификатор группы процессов которых отличается от идентификатора терминала; такие процессы невосприимчивы к сигналам, генерируемым клавиатурой. Только процессы переднего плана могут читать или, если пользователь указывает это с помощью stty tostop, записывать в терминал. Фоновые процессы, которые пытаются читать (записывать, когда действует stty tostop) терминал, получают сигнал SIGTTIN (SIGTTOU) от драйвера терминала ядра, который, если только пойман, приостанавливает процесс.

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

Существует несколько способов сослаться на задание в оболочке. Символ % вводит спецификацию задания (jobspec). Номер задания n может обозначаться как %n. На задание также можно ссылаться с помощью префикса имени, используемого для его запуска, или с помощью подстроки, которая появляется в его командной строке. Например, %ce относится к остановленному заданию, имя команды которого начинается с ce. Если префикс соответствует более чем одному заданию, bash сообщает об ошибке. С другой стороны, использование %?ce относится к любому заданию, содержащему строку ce в своей командной строке. Если подстрока соответствует более чем одному заданию, bash сообщает об ошибке. Символы %% и %+ относятся к представлению оболочки о текущем задании, которое является последним заданием, остановленным, пока оно находилось на переднем плане. или запущен в фоновом режиме. На предыдущее задание можно ссылаться с помощью %-. Если есть только одно задание, %+ и %- могут использоваться для ссылки на это задание. В выходных данных, относящихся к заданиям (например, вывод команды jobs), текущее задание всегда помечается знаком +, а предыдущее задание — знаком -. . Один % (без сопутствующей спецификации задания) также относится к текущему заданию.

Чтобы вывести задание на передний план, можно использовать простое имя: %1 – это синоним ``fg %1'', выводящий задание 1 из фона на передний план. передний план. Точно так же ``%1 &'' возобновляет задание 1 в фоновом режиме, что эквивалентно ``bg %1''.

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

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

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

ПОДСКАЗКА

При интерактивном выполнении bash отображает основную подсказку PS1, когда он готов прочитать команду, и дополнительную подсказку PS2, когда требуется дополнительный ввод. чтобы выполнить команду. Bash отображает PS0 после считывания команды, но до ее выполнения. Bash отображает PS4, как описано выше, перед трассировкой каждой команды, когда включен параметр -x. Bash позволяет настраивать эти строки подсказок, вставляя ряд специальных символов с обратной косой чертой, которые декодируются следующим образом:

\a

символ колокольчика ASCII (07)

\d

дата в формате «день недели месяц дата» (например, «вторник, 26 мая»)

\D{format}

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

\e

escape-символ ASCII (033)

\h

имя хоста до первого `.'

\H

имя хоста

\j

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

\l

базовое имя терминального устройства оболочки

\n

новая линия

\r

возврат каретки

\s

имя оболочки, базовое имя $0 (часть после последней косой черты)

\t

текущее время в 24-часовом формате ЧЧ:ММ:СС

\T

текущее время в 12-часовом формате ЧЧ:ММ:СС

\@

текущее время в 12-часовом формате am/pm

\A

текущее время в 24-часовом формате ЧЧ:ММ

\u

имя пользователя текущего пользователя

\v

версия bash (например, 2.00)

\V

выпуск bash, версия + уровень исправления (например, 2.00.0)

\w

текущий рабочий каталог с $HOME, сокращенно тильдой (используется значение переменной PROMPT_DIRTRIM)

\W

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

\!

номер истории этой команды

\#

номер этой команды

\$

если эффективный UID равен 0, #, иначе $

\nnn

символ, соответствующий восьмеричному числу nnn

\\

обратная косая черта

\[

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

\]

закончить последовательность непечатаемых символов

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

READLINE

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

Обозначение строки чтения

В этом разделе нотация в стиле Emacs используется для обозначения нажатий клавиш. Клавиши управления обозначаются C-клавиша, например, C-n означает Control-N. Точно так же мета-клавиши обозначаются M-key, поэтому M-x означает мета-X. (На клавиатурах без клавиши meta M-x означает ESC x, т. е. нажмите клавишу Escape, а затем x . . Это делает ESC метапрефиксом. Комбинация M-C-x означает ESC-Control-x, или нажмите клавишу Escape, а затем удерживая клавишу Control, одновременно нажимайте клавишу x.)

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

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

Инициализация строки чтения

Строка чтения настраивается путем помещения команд в файл инициализации (файл inputrc). Имя этого файла берется из значения переменной INPUTRC. Если эта переменная не установлена, по умолчанию используется ~/.inputrc. Если этот файл не существует или не может быть прочитан, по умолчанию используется /etc/inputrc. Когда запускается программа, использующая библиотеку readline, считывается файл инициализации и устанавливаются привязки клавиш и переменные. В файле инициализации readline разрешено только несколько основных конструкций. Пустые строки игнорируются. Строки, начинающиеся с #, являются комментариями. Строки, начинающиеся с $, обозначают условные конструкции. Другие строки обозначают привязки клавиш и настройки переменных.

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

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

M-Control-u: universal-argument

или

C-Meta-u: universal-argument

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

Распознаются следующие имена символов: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, ПРОБЕЛ и TAB.

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

Привязки клавиш Readline

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

При использовании формы имя_клавиши: имя-функции или макрос имя_клавиши — это имя клавиши, записанное на Английский. Например:

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

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

Во второй форме, "keyseq": имя-функции или макрос, keyseq отличается от keyname выше в том, что строки, обозначающие всю последовательность клавиш, могут быть указаны путем помещения последовательности в двойные кавычки. Можно использовать некоторые escape-последовательности клавиш в стиле 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 ~ связан для вставки текста `` Функциональная клавиша 1''.

Полный набор escape-последовательностей в стиле GNU Emacs приведен ниже.

\C-

префикс управления

\M-

метапрефикс

\e

escape-символ

\\

обратная косая черта

\"

буквальный "

\'

буквальный '

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

\a

оповещение (звонок)

\b

назад

\d

удалить

\f

подача формы

\n

новая линия

\r

возврат каретки

\t

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

\v

вертикальная вкладка

\nnn

восьмибитный символ, значение которого представляет собой восьмеричное значение nnn (от одной до трех цифр)

\xHH

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

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

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

Переменные строки чтения

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

set variable-name value

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

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

bell-style (audible)

Управляет тем, что происходит, когда readline хочет позвонить в звонок терминала. Если установлено значение none, readline никогда не звонит в колокольчик. Если установлено значение visible, readline использует видимый колокольчик, если он доступен. Если установлено значение audible, readline пытается позвонить в звонок терминала.

bind-tty-special-chars (On)

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

blink-matching-paren (Off)

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

colored-completion-prefix (Off)

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

colored-stats (Off)

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

comment-begin (``#'')

Строка, вставляемая при выполнении команды readline insert-comment. Эта команда привязана к M-# в режиме emacs и к # в командном режиме vi.

completion-display-width (-1)

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

completion-ignore-case (Off)

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

completion-map-case (Off)

Если установлено значение Вкл. и включен параметр completion-ignore-case, readline обрабатывает дефисы (-) и символы подчеркивания (_) как эквивалент при выполнении сопоставления и завершения имен файлов без учета регистра.

completion-prefix-display-length (0)

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

completion-query-items (100)

Это определяет, когда пользователя запрашивают о просмотре количества возможных завершений, сгенерированных командой possible-completions. Может быть установлено любое целочисленное значение, большее или равное нулю. Если количество возможных завершений больше или равно значению этой переменной, readline спросит, желает ли пользователь просмотреть их; в противном случае они просто перечислены на терминале.

convert-meta (On)

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

disable-completion (Off)

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

echo-control-characters (On)

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

editing-mode (emacs)

Определяет, начинается ли строка чтения с набора привязок клавиш, подобных Emacs или vi. Для editing-mode можно установить значение emacs или vi.

emacs-mode-string (@)

Если включена переменная show-mode-in-prompt, эта строка отображается непосредственно перед последней строкой основного приглашения, когда активен режим редактирования emacs. Значение раскрывается подобно привязке клавиш, поэтому доступен стандартный набор мета- и управляющих префиксов, а также escape-последовательностей с обратной косой чертой. Используйте escape-символы \1 и \2 для начала и окончания последовательностей непечатаемых символов, которые можно использовать для встраивания управляющей последовательности терминала в строку режима.

enable-bracketed-paste (On)

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

enable-keypad (Off)

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

enable-meta-key (On)

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

expand-tilde (Off)

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

history-preserve-point (Off)

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

history-size (unset)

Установите максимальное количество записей истории, сохраняемых в списке истории. Если установлено значение ноль, все существующие записи истории удаляются, а новые записи не сохраняются. Если установлено значение меньше нуля, количество записей в истории не ограничено. По умолчанию количество записей в истории равно значению переменной оболочки HISTSIZE. Если будет предпринята попытка установить для history-size нечисловое значение, максимальное количество записей в истории будет равно 500.

horizontal-scroll-mode (Off)

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

input-meta (Off)

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

isearch-terminators (``C-[C-J'')

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

keymap (emacs)

Установите текущую раскладку строки чтения. Набор допустимых имен раскладок: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command и vi-insert. vi эквивалентно vi-command; emacs эквивалентен emacs-standard. Значение по умолчанию — emacs; значение editing-mode также влияет на раскладку по умолчанию.

keyseq-timeout (500)

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

mark-directories (On)

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

mark-modified-lines (Off)

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

mark-symlinked-directories (Off)

Если установлено значение Вкл., к завершенным именам, которые являются символическими ссылками на каталоги, добавляется косая черта (в зависимости от значения mark-directories).

match-hidden-files (On)

Эта переменная, если установлено значение On, заставляет readline сопоставлять файлы, имена которых начинаются с `.' (скрытые файлы) при завершении имени файла. Если установлено значение Off, начальный `.' должен быть предоставлен пользователем в имени файла для завершения.

menu-complete-display-prefix (Off)

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

output-meta (Off)

Если установлено значение On, readline будет отображать символы с установленным восьмым битом напрямую, а не как escape-последовательность с мета-префиксом. По умолчанию используется значение Выкл., но readline установит для него значение Вкл., если языковой стандарт содержит восьмибитные символы.

page-completions (On)

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

print-completions-horizontally (Off)

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

revert-all-at-newline (Off)

Если установлено значение On, readline отменит все изменения в строках истории перед возвратом при выполнении accept-line. По умолчанию строки истории могут быть изменены и сохранять отдельные списки отмены при вызовах readline.

show-all-if-ambiguous (Off)

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

show-all-if-unmodified (Off)

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

show-mode-in-prompt (Off)

Если установлено значение Вкл., добавьте в начало подсказки строку, указывающую режим редактирования: emacs, команда vi или вставка vi. Строки режима устанавливаются пользователем (например, emacs-mode-string).

skip-completed-text (Off)

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

vi-cmd-mode-string ((cmd))

Если включена переменная show-mode-in-prompt, эта строка отображается непосредственно перед последней строкой основного приглашения, когда режим редактирования vi активен и находится в командном режиме. Значение раскрывается подобно привязке клавиш, поэтому доступен стандартный набор мета- и управляющих префиксов, а также escape-последовательностей с обратной косой чертой. Используйте escape-символы \1 и \2 для начала и окончания последовательностей непечатаемых символов, которые можно использовать для встраивания управляющей последовательности терминала в строку режима.

vi-ins-mode-string ((ins))

Если включена переменная show-mode-in-prompt, эта строка отображается непосредственно перед последней строкой основного приглашения, когда режим редактирования vi активен и находится в режиме вставки. Значение раскрывается подобно привязке клавиш, поэтому доступен стандартный набор мета- и управляющих префиксов, а также escape-последовательностей с обратной косой чертой. Используйте escape-символы \1 и \2 для начала и окончания последовательностей непечатаемых символов, которые можно использовать для встраивания управляющей последовательности терминала в строку режима.

visible-stats (Off)

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

Условные конструкции Readline

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

$if

Конструкция $if позволяет выполнять привязки на основе режима редактирования, используемого терминала или приложения, использующего readline. Текст теста после любого оператора сравнения продолжается до конца строки; если не указано иное, для его выделения не требуется никаких символов.

mode

Форма mode= директивы $if используется для проверки того, находится ли readline в режиме emacs или vi. Это можно использовать в сочетании с командой set keymap, например, для установки привязок только в раскладках emacs-standard и emacs-ctlx. если readline запускается в режиме emacs.

term

Форма term= может использоваться для включения специфичных для терминала привязок клавиш, возможно, для привязки последовательностей клавиш, выводимых функциональными клавишами терминала. Слово справа от = проверяется как на полное имя терминала, так и на часть имени терминала перед первым -. Это позволяет, например, sun соответствовать как sun, так и sun-cmd.

version

Тест версия может использоваться для сравнения с конкретными версиями readline. версия заменяется на текущую версию readline. Набор операторов сравнения включает =, (и ==), !=, <=, >=, < и >. Номер версии, указанный справа от оператора, состоит из основного номера версии, необязательной десятичной точки и необязательной вспомогательной версии (например, 7.1). Если дополнительная версия не указана, предполагается, что она равна 0. Оператор может быть отделен от строки версия и от аргумента номера версии пробелом.

application

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

$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
variable

Конструкция variable обеспечивает простые проверки равенства для переменных и значений readline. Допустимые операторы сравнения: =, == и !=. Имя переменной должно быть отделено от оператора сравнения пробелом; оператор может быть отделен от значения справа пробелом. Можно тестировать как строковые, так и логические переменные. Логические переменные должны быть проверены на соответствие значениям on и off.

$endif

Эта команда, как видно из предыдущего примера, завершает команду $if.

$else

Команды в этой ветви директивы $if выполняются, если тест не пройден.

$include

Эта директива принимает в качестве аргумента одно имя файла и считывает команды и привязки из этого файла. Например, следующая директива будет выглядеть как /etc/inputrc:

$include   /etc/inputrc

Идет поиск

Readline предоставляет команды для поиска в истории команд (см. HISTORY ниже) строк, содержащих указанную строку. Существует два режима поиска: инкрементальный и неинкрементный.

Инкрементальный поиск начинается до того, как пользователь закончит вводить строку поиска. По мере ввода каждого символа строки поиска readline отображает следующую запись из истории, совпадающую с уже введенной строкой. Инкрементный поиск требует ровно столько символов, сколько нужно, чтобы найти нужную запись в истории. Символы, присутствующие в значении переменной search-terminators, используются для завершения добавочного поиска. Если этой переменной не присвоено значение, символы Escape и Control-J завершат пошаговый поиск. Control-G прервет добавочный поиск и восстановит исходную строку. Когда поиск завершается, запись истории, содержащая строку поиска, становится текущей строкой.

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

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

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

Имена команд строки чтения

Ниже приведен список имен команд и последовательностей клавиш по умолчанию, к которым они привязаны. Имена команд без сопровождающей последовательности клавиш по умолчанию не связаны. В следующих описаниях точка относится к текущей позиции курсора, а метка относится к позиции курсора, сохраненной командой set-mark. Текст между точкой и меткой называется областью.

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

beginning-of-line (C-a)

Перейти к началу текущей строки.

end-of-line (C-e)

Переход к концу строки.

forward-char (C-f)

Продвинуться вперед на персонажа.

backward-char (C-b)

Вернуть персонажа.

forward-word (M-f)

Переход вперед к концу следующего слова. Слова состоят из буквенно-цифровых символов (букв и цифр).

backward-word (M-b)

Возврат к началу текущего или предыдущего слова. Слова состоят из буквенно-цифровых символов (букв и цифр).

shell-forward-word

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

shell-backward-word

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

previous-screen-line

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

next-screen-line

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

clear-display (M-C-l)

Очистите экран и, если возможно, буфер прокрутки терминала, затем перерисуйте текущую строку, оставив текущую строку вверху экрана.

clear-screen (C-l)

Очистите экран, затем перерисуйте текущую строку, оставив текущую строку вверху экрана. С аргументом обновить текущую строку, не очищая экран.

redraw-current-line

Обновить текущую строку.

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

accept-line (Newline, Return)

Принять строку независимо от того, где находится курсор. Если эта строка не пуста, добавьте ее в список истории в соответствии с состоянием переменной HISTCONTROL. Если строка является измененной строкой истории, то восстановить строку истории в исходное состояние.

previous-history (C-p)

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

next-history (C-n)

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

beginning-of-history (M-<)

Перейти на первую строку в истории.

end-of-history (M->)

Перейти к концу истории ввода, т. е. к строке, которую в настоящее время вводят.

reverse-search-history (C-r)

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

forward-search-history (C-s)

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

non-incremental-reverse-search-history (M-p)

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

non-incremental-forward-search-history (M-n)

Поиск вперед по истории с использованием неинкрементного поиска строки, предоставленной пользователем.

history-search-forward

Поиск вперед по истории строки символов между началом текущей строки и точкой. Это неинкрементный поиск.

history-search-backward

Поиск назад по истории строки символов между началом текущей строки и точкой. Это неинкрементный поиск.

history-substring-search-backward

Поиск в истории назад строки символов между началом текущей строки и текущей позицией курсора (точка). Строка поиска может совпадать где угодно в строке истории. Это неинкрементный поиск.

history-substring-search-forward

Поиск вперед по истории строки символов между началом текущей строки и точкой. Строка поиска может совпадать где угодно в строке истории. Это неинкрементный поиск.

yank-nth-arg (M-C-y)

Вставьте первый аргумент предыдущей команды (обычно второе слово в предыдущей строке) в точку. С аргументом n вставьте n-е слово из предыдущей команды (слова в предыдущей команде начинаются со слова 0). Отрицательный аргумент вставляет n-е слово с конца предыдущей команды. После вычисления аргумента n он извлекается, как если бы было указано расширение истории "!n".

yank-last-arg (M-. , M-_ )

Вставьте последний аргумент предыдущей команды (последнее слово предыдущей записи в истории). С числовым аргументом ведите себя точно так же, как yank-nth-arg. Последовательные вызовы yank-last-arg перемещаются назад по списку истории, вставляя последнее слово (или слово, указанное в аргументе первого вызова) каждой строки по очереди. Любой числовой аргумент, передаваемый этим последовательным вызовам, определяет направление движения по истории. Отрицательный аргумент переключает направление по истории (назад или вперед). Средства расширения истории используются для извлечения последнего слова, как если бы было указано расширение истории "!$".

shell-expand-line (M-C-e)

Расширьте строку, как это делает оболочка. Это выполняет расширение псевдонима и истории, а также все расширения слова оболочки. См. РАСШИРЕНИЕ ИСТОРИИ ниже для описания расширения истории.

history-expand-line (M-^)

Выполнить раскрытие истории в текущей строке. См. РАСШИРЕНИЕ ИСТОРИИ ниже для описания расширения истории.

magic-space

Выполнить расширение истории в текущей строке и вставить пробел. См. РАСШИРЕНИЕ ИСТОРИИ ниже для описания расширения истории.

alias-expand-line

Выполнить раскрытие псевдонима в текущей строке. См. Псевдонимы выше для описания расширения псевдонима.

history-and-alias-expand-line

Выполнить расширение истории и псевдонима в текущей строке.

insert-last-argument (M-. , M-_ )

Синоним слова yank-last-arg.

operate-and-get-next (C-o)

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

edit-and-execute-command (C-x C-e)

Вызовите редактор в текущей командной строке и выполните результат как команду оболочки. Bash пытается вызвать $VISUAL, $EDITOR и emacs в качестве редактора в указанном порядке.

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

end-of-file (usually C-d)

Символ, указывающий конец файла, установленный, например, с помощью ``stty''. Если этот символ читается, когда в строке нет символов, а точка находится в начале строки, Readline интерпретирует его как конец ввода и возвращает EOF.

delete-char (C-d)

Удалить символ в точке. Если эта функция привязана к тому же символу, что и символ tty EOF, как это обычно бывает с C-d, эффекты см. выше.

backward-delete-char (Rubout)

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

forward-backward-delete-char

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

quoted-insert (C-q, C-v)

Добавить следующий введенный символ в строку дословно. Вот как вставлять такие символы, как, например, C-q.

tab-insert (C-v TAB)

Вставьте символ табуляции.

self-insert (a, b, A, 1, !, ...)

Вставьте введенный символ.

transpose-chars (C-t)

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

transpose-words (M-t)

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

upcase-word (M-u)

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

downcase-word (M-l)

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

capitalize-word (M-c)

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

overwrite-mode

Переключить режим перезаписи. При явном положительном числовом аргументе переключается в режим перезаписи. При явном неположительном числовом аргументе переключается в режим вставки. Эта команда влияет только на режим emacs; Режим vi перезаписывает по-другому. Каждый вызов readline() начинается в режиме вставки. В режиме перезаписи символы, привязанные к самостоятельной вставке, заменяют текст в точке, а не смещают текст вправо. Символы, связанные с backward-delete-char, заменяют символ перед точкой пробелом. По умолчанию эта команда не привязана.

Убийство и дерганье

kill-line (C-k)

Убейте текст от точки до конца строки.

backward-kill-line (C-x Rubout)

Убейте назад к началу линии.

unix-line-discard (C-u)

Убейте назад от точки к началу линии. Убитый текст сохраняется в списке убийств.

kill-whole-line

Убейте всех персонажей в текущей строке, независимо от того, где находится точка.

kill-word (M-d)

Kill от точки до конца текущего слова или, если между словами, до конца следующего слова. Границы слов такие же, как и в forward-word.

backward-kill-word (M-Rubout)

Убейте слово за точкой. Границы слов такие же, как и у backward-word.

shell-kill-word

Kill от точки до конца текущего слова или, если между словами, до конца следующего слова. Границы слов такие же, как и в shell-forward-word.

shell-backward-kill-word

Убейте слово за точкой. Границы слов такие же, как и у shell-backward-word.

unix-word-rubout (C-w)

Убейте слово за точкой, используя пробел в качестве границы слова. Убитый текст сохраняется в списке убийств.

unix-filename-rubout

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

delete-horizontal-space (M-\)

Удалите все пробелы и вкладки вокруг точки.

kill-region

Убить текст в текущем регионе.

copy-region-as-kill

Скопируйте текст в регионе в буфер уничтожения.

copy-backward-word

Скопируйте слово перед точкой в буфер уничтожения. Границы слов такие же, как и у backward-word.

copy-forward-word

Скопируйте слово, следующее за точкой, в буфер уничтожения. Границы слов такие же, как и у forward-word.

yank (C-y)

Вставьте верхнюю часть кольца уничтожения в буфер в точке.

yank-pop (M-y)

Поверните стопорное кольцо и дерните новую крышку. Работает только после yank или yank-pop.

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

digit-argument (M-0, M-1, ..., M--)

Добавьте эту цифру к уже накапливающемуся аргументу или начните новый аргумент. М-- начинает отрицательный аргумент.

universal-argument

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

Завершение

complete (TAB)

Попытка выполнить завершение текста перед точкой. Bash пытается завершить обработку текста как переменной (если текст начинается с $), имени пользователя (если текст начинается с ~), имени хоста (если текст начинается с @) или команды (включая псевдонимы и функции) по очереди. Если ни один из них не дает совпадения, предпринимается попытка завершения имени файла.

possible-completions (M-?)

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

insert-completions (M-*)

Вставьте все завершения текста перед точкой, которые были бы созданы с помощью possible-completions.

menu-complete

Аналогичен complete, но слово, которое нужно завершить, заменяется одним соответствием из списка возможных завершений. Повторное выполнение шагов menu-complete по списку возможных завершений, вставляя каждое совпадение по очереди. В конце списка завершений звонит звонок (с учетом настройки стиля звонка) и восстанавливается исходный текст. Аргумент n перемещает n позиций вперед в списке совпадений; отрицательный аргумент может использоваться для перемещения назад по списку. Эта команда предназначена для привязки к TAB, но по умолчанию она не привязана.

menu-complete-backward

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

delete-char-or-list

Удаляет символ под курсором, если он не находится в начале или конце строки (например, delete-char). Если в конце строки, ведет себя идентично possible-completions. Эта команда не привязана по умолчанию.

complete-filename (M-/)

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

possible-filename-completions (C-x /)

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

complete-username (M-~)

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

possible-username-completions (C-x ~)

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

complete-variable (M-$)

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

possible-variable-completions (C-x $)

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

complete-hostname (M-@)

Попытаться завершить текст перед точкой, рассматривая его как имя хоста.

possible-hostname-completions (C-x @)

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

complete-command (M-!)

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

possible-command-completions (C-x !)

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

dynamic-complete-history (M-TAB)

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

dabbrev-expand

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

complete-into-braces (M-{)

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

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

start-kbd-macro (C-x ( )

Начните сохранять символы, введенные в текущий макрос клавиатуры.

end-kbd-macro (C-x ) )

Остановите сохранение символов, введенных в текущий макрос клавиатуры, и сохраните определение.

call-last-kbd-macro (C-x e)

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

print-last-kbd-macro ()

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

Разнообразный

re-read-init-file (C-x C-r)

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

abort (C-g)

Прервите текущую команду редактирования и позвоните в звонок терминала (в зависимости от настройки стиля звонка).

do-lowercase-version (M-A, M-B, M-x, ...)

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

prefix-meta (ESC)

Преобразование следующего введенного символа.

ESC f эквивалентно Meta-f.

undo (C-_, C-x C-u)

Инкрементальная отмена, запоминаемая отдельно для каждой строки.

revert-line (M-r)

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

tilde-expand (M-&)

Выполнить расширение тильды для текущего слова.

set-mark (C-@, M-<space>)

Установите метку в точку. Если указан числовой аргумент, метка устанавливается в эту позицию.

exchange-point-and-mark (C-x C-x)

Поменяйте местами точку с отметкой. Текущая позиция курсора устанавливается в сохраненную позицию, а старая позиция курсора сохраняется как метка.

character-search (C-])

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

character-search-backward (M-C-])

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

skip-csi-sequence

Прочитайте достаточно символов, чтобы использовать последовательность с несколькими ключами, например те, которые определены для таких ключей, как Home и End. Такие последовательности начинаются с индикатора управляющей последовательности (CSI), обычно ESC-[. Если эта последовательность привязана к «\[», ключи, создающие такие последовательности, не будут иметь никакого эффекта, если только они явно не связаны с командой readline, вместо того, чтобы вставлять случайные символы в буфер редактирования. По умолчанию это не привязано, но обычно привязано к ESC-[.

insert-comment (M-#)

Без числового аргумента значение переменной readline comment-begin вставляется в начало текущей строки. Если указан числовой аргумент, эта команда действует как переключатель: если символы в начале строки не соответствуют значению comment-begin, значение вставляется, в противном случае символы в comment-begin удаляются с начала строки. В любом случае строка принимается так, как если бы была введена новая строка. Значение по умолчанию comment-begin заставляет эту команду сделать текущую строку комментарием оболочки. Если числовой аргумент приводит к удалению символа комментария, строка будет выполнена оболочкой.

glob-complete-word (M-g)

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

glob-expand-word (C-x *)

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

glob-list-expansions (C-x g)

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

dump-functions

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

dump-variables

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

dump-macros

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

display-shell-version (C-x C-v)

Отображение информации о версии текущего экземпляра bash.

Программируемое завершение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124

Complete -D -F _completion_loader -o bashdefault -o default

ИСТОРИЯ

Когда опция -o history для встроенной команды set включена, оболочка предоставляет доступ к истории команд, списку ранее введенных команд. Значение переменной HISTSIZE используется как количество команд для сохранения в списке истории. Сохраняется текст последних команд HISTSIZE (по умолчанию 500).

Оболочка хранит каждую команду в списке истории до раскрытия параметров и переменных (см. РАСШИРЕНИЕ выше), но после выполнения раскрытия истории, в зависимости от значений переменных оболочки HISTIGNORE. и HISTCONTROL.

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

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

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

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

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

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

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

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

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

Расширение истории выполняется сразу после прочтения полной строки, до того, как оболочка разбивает ее на слова, и выполняется для каждой строки отдельно, без учета цитирования предыдущих строк. Это происходит в двух частях. Первый — определить, какую строку из списка истории использовать при подстановке. Во-вторых, выбрать части этой строки для включения в текущую. Строка, выбранная из истории, является событием, а части этой строки, над которыми выполняются действия, являются словами. Для управления выбранными словами доступны различные модификаторы. Строка разбивается на слова так же, как и при чтении ввода, поэтому несколько слов, разделенных метасимволами и заключенных в кавычки, считаются одним словом. Расширения истории представлены появлением символа расширения истории, который по умолчанию  ! . Только обратная косая черта ( \ ) и одинарные кавычки могут заключать в кавычки символ расширения истории, но символ расширения истории также считается заключенным в кавычки, если он непосредственно предшествует закрывающей двойной кавычке в строке с двойными кавычками.

Несколько символов запрещают расширение истории, если они находятся сразу после символа расширения истории, даже если он не заключен в кавычки: пробел, табуляция, новая строка, возврат каретки и =. Если параметр оболочки extglob включен, ( также запрещает расширение.

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

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

Обозначения событий

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

!

Начать подстановку истории, за исключением случаев, когда за ними следует пробел, новая строка, возврат каретки,=или ((когда опция оболочки extglob включена с помощью shop встроенный).

!n

См. командную строку n.

!-n

Обратитесь к текущей команде минус n.

!!

Обратитесь к предыдущей команде. Это синоним `!-1'.

!string

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

!?string[?]

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

^string1^string2^

Быстрая замена. Повторите предыдущую команду, заменив string1 на string2. Эквивалентно ``!!:s^string1^string2^'' (см. Модификаторы ниже).

!#

Вся командная строка набрана до сих пор.

Обозначения слов

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

0 (zero)

Нулевое слово. Для оболочки это командное слово.

n

n-е слово.

^

Первый аргумент. То есть слово 1.

$

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

%

Первое слово, совпавшее с самой последней строкой `?string?' поиск, если строка поиска начинается с символа, который является частью слова.

x-y

Ассортимент слов; `-y' сокращает `0-y'.

*

Все слова, кроме нулевого. Это синоним для `1-$'. Использование *, если в событии всего одно слово, не является ошибкой; в этом случае возвращается пустая строка.

x*

Сокращает x-$.

x-

Сокращает x-$ как x*, но опускает последнее слово. Если x отсутствует, по умолчанию используется значение 0.

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

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

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

h

Удалите завершающий компонент имени файла, оставив только заголовок.

t

Удалите все ведущие компоненты имени файла, оставив хвост.

r

Удалите завершающий суффикс формы .xxx, оставив базовое имя.

e

Удалите все, кроме завершающего суффикса.

p

Напечатайте новую команду, но не выполняйте ее.

q

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

x

Заключайте замененные слова в кавычки, как с q, но разбивайте слова на пробелы и новые строки. Модификаторы q и x являются взаимоисключающими; используется последний предоставленный.

s/old/new/

Замените новым первое появление старого в строке события. В качестве разделителя вместо/можно использовать любой символ. Последний разделитель необязателен, если он является последним символом строки события. Разделитель может быть заключен в кавычки в старом и новом с одним обратным слэшем. Если & появляется в новый, он заменяется на старый. Одинарная обратная косая черта будет заключаться в кавычки &. Если old имеет значение null, он устанавливается равным последнему замененному old или, если предыдущих замен истории не было, последней строке в !?строка[?] поиск. Если new имеет значение null, все соответствующие old удаляются.

&

Повторить предыдущую замену.

g

Заставить изменения применяться ко всей строке событий. Используется в сочетании с `:s' (например, `:gs/old/ new/') или `:&'. При использовании с `:s' вместо/можно использовать любой разделитель, а последний разделитель является необязательным, если он является последним символом строки события. a может использоваться как синоним g.

G

Примените следующий модификатор `s' или `&' один раз к каждому слову в строке события.

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

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

: [arguments]

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

.  filename [arguments]
source filename [arguments]

Читать и выполнять команды из имя_файла в текущей среде оболочки и возвращать статус выхода последней команды, выполненной из имя_файла. Если имя файла не содержит косой черты, имена файлов в PATH используются для поиска каталога, содержащего имя файла. Файл, который ищется в PATH, не обязательно должен быть исполняемым. Когда bash не находится в режиме posix, текущий каталог ищется, если файл не найден в PATH. Если параметр sourcepath для встроенной команды shop отключен, поиск по PATH не выполняется. Если указаны какие-либо аргументы, они становятся позиционными параметрами при выполнении filename.

В противном случае позиционные параметры не изменяются. Если параметр -T включен, источник наследует любую ловушку в DEBUG; если это не так, любая строка ловушки DEBUG сохраняется и восстанавливается вокруг вызова source, а source сбрасывает DEBUG. ловушка во время ее выполнения. Если -T не установлен, а исходный файл изменяет ловушку DEBUG, новое значение сохраняется после завершения source. Статус возврата — это статус последней команды, выполненной в скрипте (0, если никакие команды не выполняются), и false, если имя файла не найден или не может быть прочитан.

alias [-p] [name[=value] ...]

Псевдоним без аргументов или с параметром -p выводит список псевдонимов в виде псевдоним имя=<value в стандартном выводе. Когда аргументы предоставлены, псевдоним определяется для каждого имени, чье значение задано. Завершающий пробел в value приводит к тому, что следующее слово проверяется на замену псевдонима, когда псевдоним расширяется. Для каждого имени в списке аргументов, для которого не указано значение, выводятся имя и значение псевдонима. Псевдоним возвращает значение true, если не задано имя, для которого псевдоним не определен.

bg [jobspec ...]

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

bind [-m keymap] [-lpsvPSVX]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command

Отображение текущих привязок клавиш и функций readline, привязка последовательности клавиш к функции или макросу readline или установка переменной readline. Каждый аргумент, не являющийся параметром, является командой, как это будет выглядеть в .inputrc, но каждая привязка или команда должны передаваться как отдельный аргумент; например, '"\C-x\C-r": повторно прочитать файл инициализации'. Опции, если они предоставлены, имеют следующие значения:

-m keymap

Используйте keymap в качестве раскладки, на которую будут влиять последующие привязки. Допустимые имена keymap: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command и vi-insert. vi эквивалентно vi-command (vi-move также является синонимом); emacs эквивалентен emacs-standard.

-l

Перечислите имена всех функций readline.

-p

Отображать имена и привязки функций readline таким образом, чтобы их можно было прочитать повторно.

-P

Список текущих имен и привязок функций readline.

-s

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

-S

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

-v

Отображать имена и значения переменных readline таким образом, чтобы их можно было прочитать повторно.

-V

Список текущих имен и значений переменных readline.

-f filename

Чтение привязок клавиш из имя_файла.

-q function

Запрос о том, какие клавиши вызывают указанную функцию.

-u function

Отмените привязку всех клавиш к названной функции.

-r keyseq

Удалите все текущие привязки для keyseq.

-x keyseq:shell-command

Заставляет shell-command выполняться всякий раз, когда вводится keyseq. При выполнении команды оболочки оболочка устанавливает в переменной READLINE_LINE содержимое буфера строк readline и READLINE_POINT. и READLINE_MARK в текущее местоположение точки вставки и сохраненную точку вставки (метку) соответственно.

Если выполненная команда изменяет значение любого из READLINE_LINE, READLINE_POINT или READLINE_MARK, эти новые значения будут отражены в состоянии редактирования.

-X

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

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

break [n]

Выйдите из цикла for, while, until или select. Если указано n, разбить n уровней. n должно быть ≥ 1. Если n больше количества охватывающих циклов, все охватывающие циклы завершаются. Возвращаемое значение равно 0, если n не больше или равно 1.

builtin shell-builtin [arguments]

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

caller [expr]

Возвращает контекст любого активного вызова подпрограммы (функция оболочки или скрипт, выполняемый с помощью встроенных функций . или source). Без выражения вызывающий отображает номер строки и имя исходного файла текущего вызова подпрограммы. Если в качестве expr указано неотрицательное целое число, вызывающий отображает номер строки, имя подпрограммы и исходный файл, соответствующие этой позиции в текущем стеке вызовов выполнения. Эта дополнительная информация может использоваться, например, для печати трассировки стека. Текущим кадром является кадр 0. Возвращаемое значение равно 0, если оболочка не выполняет вызов подпрограммы или expr не соответствует допустимой позиции в стеке вызовов.

cd [-L|[-P [-e]] [-@]] [dir]

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

Альтернативные имена каталогов в CDPATH разделяются двоеточием (:). Пустое имя каталога в CDPATH совпадает с текущим каталогом, т. е. ``.''. Если dir начинается с косой черты (/), то CDPATH не используется. Параметр -P заставляет cd использовать структуру физического каталога, разрешая символические ссылки при обходе dir и перед обработкой экземпляров .. в dir (см. также параметр -P для встроенной команды set); параметр -L заставляет переходить по символическим ссылкам, разрешая ссылку после обработки экземпляров .. в dir.

Если .. появляется в dir, он обрабатывается путем удаления непосредственно предшествующего компонента имени пути из dir, обратно до косой черты или начала <директор. Если параметр -e указан с -P и текущий рабочий каталог не может быть успешно определен после успешного изменения каталога, cd вернет неудачный статус. В системах, которые его поддерживают, параметр -@ представляет расширенные атрибуты, связанные с файлом, в виде каталога.

Аргумент - преобразуется в $OLDPWD перед попыткой изменения каталога. Если используется непустое имя каталога из CDPATH или если - является первым аргументом, и изменение каталога прошло успешно, абсолютный путь к новому рабочему каталогу записывается в стандартный вывод. Возвращаемое значение истинно, если каталог был успешно изменен; ложно в противном случае.

command [-pVv] command [arg ...]

Запустите команду с аргументами, отключив обычный поиск функции оболочки. Выполняются только встроенные команды или команды, найденные в PATH. Если указана опция -p, поиск команды выполняется с использованием значения по умолчанию для PATH, которое гарантированно найдет все стандартные коммунальные услуги. Если указан параметр -V или -v, выводится описание команды.

Параметр -v приводит к отображению одного слова, указывающего на команду или имя файла, используемого для вызова команды; параметр -V дает более подробное описание. Если указан параметр -V или -v, статус выхода равен 0, если команда найдена, и 1, если нет. Если ни одна из опций не указана и произошла ошибка или команда не найдена, статус выхода равен 127. В противном случае статус выхода встроенной команды является статусом выхода <команда.

compgen [option] [word]

Генерировать возможные совпадения завершения для word в соответствии с параметрами, которые могут быть любыми параметрами, принимаемыми встроенной функцией complete, за исключением -p и -r и запишите совпадения в стандартный вывод. При использовании параметров -F или -C различные переменные оболочки, устанавливаемые средствами программируемого завершения, хотя и доступны, не будут иметь полезных значений.

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

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

complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DEI] [name ...]

Укажите, как должны быть заполнены аргументы для каждого name. Если указан параметр -p или параметры не указаны, существующие спецификации завершения печатаются таким образом, чтобы их можно было повторно использовать в качестве входных данных. Параметр -r удаляет спецификацию завершения для каждого имени или, если имена не указаны, удаляет все спецификации завершения. Опция -D указывает, что к выполнению команды "по умолчанию" должны применяться другие предоставленные опции и действия; то есть попытка завершения команды, для которой ранее не было определено завершение. Параметр -E указывает, что другие предоставленные параметры и действия должны применяться к ``пустому'' завершению команды; то есть попытка завершения на пустой строке. Параметр -I указывает, что другие предоставленные параметры и действия должны применяться к завершению начального неназначаемого слова в строке или после разделителя команд, такого как ; или |, что обычно является завершением имени команды. Если указано несколько параметров, параметр -D имеет приоритет над -E, и оба имеют приоритет над -I. Если указан любой из -D, -E или -I, любые другие аргументы name игнорируются; эти дополнения применяются только к случаю, указанному в опции.

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

Другие параметры, если они указаны, имеют следующие значения. Аргументы параметров -G, -W и -X (и, при необходимости, -P > и -S) должны быть заключены в кавычки, чтобы защитить их от раскрытия до вызова встроенной функции complete.

-o comp-option

comp-option управляет несколькими аспектами поведения compspec помимо простого создания дополнений. comp-option может быть одним из следующих:

bashdefault

Выполните остальные завершения bash по умолчанию, если compspec не сгенерирует совпадений.

default

Используйте завершение имени файла по умолчанию в readline, если compspec не создает совпадений.

dirnames

Выполните завершение имени каталога, если compspec не создает совпадений.

filenames

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

noquote

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

nosort

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

nospace

Сообщите readline, чтобы он не добавлял пробел (по умолчанию) к словам, завершающимся в конце строки.

plusdirs

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

-A action

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

alias

Псевдонимы. Также может быть указано как -a.

arrayvar

Имена переменных массива.

binding

Имена привязок клавиш Readline.

builtin

Имена встроенных команд оболочки. Также может быть указано как -b.

command

Имена команд. Также может быть указано как -c.

directory

Имена каталогов. Также может быть указано как -d.

disabled

Имена отключенных встроенных модулей оболочки.

enabled

Имена включенных встроенных модулей оболочки.

export

Имена экспортируемых переменных оболочки. Также может быть указано как -e.

file

Имена файлов. Также может быть указано как -f.

function

Имена функций оболочки.

group

Названия групп. Также может быть указано как -g.

helptopic

Разделы справки, принятые встроенной help.

hostname

Имена хостов, взятые из файла, указанного в переменной оболочки HOSTFILE.

job

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

keyword

Зарезервированные слова оболочки. Также может быть указано как -k.

running

Имена запущенных заданий, если управление заданиями активно.

service

Названия услуг. Также может быть указано как -s.

setopt

Допустимые аргументы для параметра -o встроенной функции set.

shopt

Имена параметров оболочки, принятые встроенной функцией shop.

signal

Имена сигналов.

stopped

Имена остановленных заданий, если управление заданиями активно.

user

Имена пользователей. Также может быть указан как -u.

variable

Имена всех переменных оболочки. Также может быть указано как -v.

-C command

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

-F function

Функция оболочки function выполняется в текущей среде оболочки. При выполнении функции первый аргумент ($1) — это имя команды, аргументы которой завершаются, второй аргумент ($2) — завершаемое слово, а третий аргумент ($3) — это слово, предшествующее слову, которое завершается в текущей командной строке. Когда он завершается, возможные завершения извлекаются из значения переменной массива COMPREPLY.

-G globpat

Шаблон расширения имени пути globpat расширяется для создания возможных дополнений.

-P prefix

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

-S suffix

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

-W wordlist

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

-X filterpat

filterpat – это шаблон, используемый для расширения имени пути. Он применяется к списку возможных дополнений, сгенерированных предыдущими параметрами и аргументами, и каждое завершение, соответствующее filterpat, удаляется из списка. Начальный ! в filterpat отменяет шаблон; в этом случае любое завершение, не соответствующее filterpat, удаляется.

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

compopt [-o option] [-DEI] [+o option] [name]

Измените параметры завершения для каждого имени в соответствии с параметрами или для выполняемого в данный момент завершения, если имя не указано. Если options не указаны, отобразите варианты завершения для каждого имени или текущего завершения. Возможные значения option действительны для встроенной функции complete, описанной выше. Параметр -D указывает, что другие предоставленные параметры должны применяться к завершению команды ``по умолчанию''; то есть попытка завершения команды, для которой ранее не было определено завершение. Параметр -E указывает, что другие предоставленные параметры должны применяться к ``пустому'' завершению команды; то есть попытка завершения на пустой строке. Параметр -I указывает, что другие предоставленные параметры должны применяться к завершению начального слова без назначения в строке или после разделителя команд, такого как ; или |, что обычно является завершением имени команды.

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

continue [n]

Возобновить следующую итерацию окружающего цикла for, while, until или select. Если указано n, продолжить с n-го охватывающего цикла. n должно быть ≥ 1. Если n больше, чем количество охватывающих циклов, возобновляется последний охватывающий цикл (цикл «верхнего уровня»). Возвращаемое значение равно 0, если n не больше или равно 1.

declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]

Объявите переменные и/или присвойте им атрибуты. Если имена не указаны, отобразите значения переменных. Параметр -p отображает атрибуты и значения каждого имени. Когда -p используется с аргументами name, дополнительные параметры, кроме -f и -F, игнорируются. . Когда -p указан без аргументов name, он будет отображать атрибуты и значения всех переменных, имеющих атрибуты, указанные дополнительными параметрами. Если с -p не указаны другие параметры, declare отобразит атрибуты и значения всех переменных оболочки. Параметр -f ограничивает отображение функциями оболочки. Параметр -F запрещает отображение определений функций; печатаются только имя функции и атрибуты. Если параметр оболочки extdebug включен с помощью shop, также отображаются имя исходного файла и номер строки, в которой определено каждое имя. Параметр -F подразумевает -f. Параметр -g заставляет переменные создаваться или изменяться в глобальном масштабе, даже если declare выполняется в функции оболочки. Во всех остальных случаях игнорируется. Опция -I заставляет локальные переменные наследовать атрибуты (кроме атрибута nameref) и значение любой существующей переменной с тем же именем в момент времени. окружающий размах. Если существующей переменной нет, локальная переменная изначально не устанавливается. Следующие параметры можно использовать для ограничения вывода переменными с указанным атрибутом или для присвоения атрибутов переменных:

-a

Каждое имя является переменной индексированного массива (см. раздел Массивы выше).

-A

Каждое имя является переменной ассоциативного массива (см. раздел Массивы выше).

-f

Используйте только имена функций.

-i

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

-l

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

-n

Присвойте каждому name атрибут nameref, сделав его ссылкой имени на другую переменную. Эта другая переменная определяется значением name. Все ссылки, присвоения и изменения атрибутов name, за исключением тех, которые используют или изменяют сам атрибут -n, выполняются для переменной, на которую ссылается name > значение. Атрибут nameref нельзя применять к переменным массива.

-r

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

-t

Присвойте каждому name атрибут trace. Трассируемые функции наследуют ловушки DEBUG и RETURN от вызывающей оболочки. Атрибут trace не имеет специального значения для переменных.

-u

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

-x

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

Использование `+' вместо `-' вместо этого отключает атрибут, за исключением того, что +a и +A нельзя использовать для уничтожения переменных массива и +r не удалит атрибут только для чтения. При использовании в функции команды declare и typeset делают каждое имя локальным, как и в случае с командой local, если только Опция -g предоставляется. Если за именем переменной следует =value, значение переменной устанавливается равным value. При использовании -a или -A и синтаксиса составного присваивания для создания переменных массива дополнительные атрибуты не вступают в силу до последующих присвоений. Возвращаемое значение равно 0, если не встречается недопустимая опция, делается попытка определить функцию с помощью ``-f foo=bar'', делается попытка присвоить значение переменной только для чтения, делается попытка присвоить значение переменной массива без использования синтаксиса составного присваивания (см. Массивы выше), одно из имен не является допустимым именем переменной оболочки, делается попытка преобразовать статус off readonly для переменной readonly, делается попытка отключить статус массива для переменной массива или делается попытка отобразить несуществующую функцию с помощью -f.

dirs [-clpv] [+n] [-n]

Без опций отображает список запомненных каталогов. Отображение по умолчанию находится в одной строке с именами каталогов, разделенными пробелами. Каталоги добавляются в список командой pushd; команда popd удаляет записи из списка. Текущий каталог всегда является первым каталогом в стеке.

-c

Очищает стек каталогов, удаляя все записи.

-l

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

-p

Распечатайте стек каталогов с одной записью в строке.

-v

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

+n

Отображает n-ю запись слева в списке, отображаемом dirs при вызове без параметров, начиная с нуля.

-n

Отображает n-ю запись справа в списке, отображаемом dirs при вызове без параметров, начиная с нуля.

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

disown [-ar] [-h] [jobspec ... | pid ... ]

Без параметров удалить все спецификации_задания из таблицы активных заданий. Если jobspec отсутствует и не указан ни параметр -a, ни -r, текущее задание используется. Если указана опция -h, каждая спецификация задания не удаляется из таблицы, а помечается так, что SIGHUP не отправляется заданию. если оболочка получает SIGHUP. Если jobspec не указан, параметр -a означает удаление или пометку всех заданий; параметр -r без аргумента jobspec ограничивает работу запущенными заданиями. Возвращаемое значение равно 0, если в спецификации задания не указано действительное задание.

echo [-neE] [arg ...]

Выведите аргументы, разделенные пробелами, после которых следует новая строка. Статус возврата равен 0, если не возникает ошибка записи. Если указан -n, завершающий символ новой строки подавляется. Если указана опция -e, включается интерпретация следующих символов, экранированных обратной косой чертой. Параметр -E отключает интерпретацию этих escape-символов даже в системах, где они интерпретируются по умолчанию. Параметр оболочки xpg_echo может использоваться для динамического определения того, заменяет ли echo эти escape-символы по умолчанию. echo не интерпретирует -- как конец опций. echo интерпретирует следующие управляющие последовательности:

\a

оповещение (звонок)

\b

назад

\c

подавить дальнейший вывод

\e
\E

escape-символ

\f

подача формы

\n

новая линия

\r

возврат каретки

\t

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

\v

вертикальная вкладка

\\

обратная косая черта

\0nnn

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

\xHH

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

\uHHHH

символ Unicode (ISO/IEC 10646), значение которого представляет собой шестнадцатеричное значение HHHH (от одной до четырех шестнадцатеричных цифр)

\UHHHHHHHH

символ Unicode (ISO/IEC 10646), значение которого представляет собой шестнадцатеричное значение HHHHHHHH (от одной до восьми шестнадцатеричных цифр)

enable [-a] [-dnps] [-f filename] [name ...]

Включать и отключать встроенные команды оболочки. Отключение встроенной команды позволяет выполнять дисковую команду с тем же именем, что и у встроенной команды оболочки, без указания полного пути, даже если оболочка обычно ищет встроенные команды перед дисковыми командами. Если используется -n, каждое имя отключается; в противном случае включены имена. Например, чтобы использовать двоичный файл test, найденный через PATH, вместо встроенной версии оболочки, запустите ``enable -n test''. Параметр -f означает загрузку новой встроенной команды name из общего объекта filename в системах, поддерживающих динамическую загрузку. Опция -d удалит встроенную функцию, ранее загруженную с помощью -f. Если аргументы name не указаны или указана опция -p, выводится список встроенных команд оболочки. Без других аргументов опции список состоит из всех включенных встроенных оболочек. Если указано -n, печатаются только отключенные встроенные функции. Если указано -a, печатаемый список включает все встроенные функции с указанием того, включена ли каждая из них. Если указан -s, вывод ограничен специальными встроенными функциями POSIX. Возвращаемое значение равно 0, если только name не является встроенной функцией оболочки или если при загрузке новой встроенной функции из общего объекта произошла ошибка.

eval [arg ...]

arg считываются и объединяются в одну команду. Затем эта команда считывается и выполняется оболочкой, и ее статус выхода возвращается как значение eval. Если аргументов нет или есть только нулевые аргументы, eval возвращает 0.

exec [-cl] [-a name] [command [arguments]]

Если указана команда, она заменяет оболочку. Новый процесс не создается. аргументы становятся аргументами команды. Если указана опция -l, оболочка помещает тире в начале нулевого аргумента, переданного команде. Это то, что делает login(1). Параметр -c вызывает выполнение команды с пустой средой. Если указано -a, оболочка передает имя в качестве нулевого аргумента выполняемой команде. Если команда не может быть выполнена по какой-либо причине, неинтерактивная оболочка завершает работу, если не включена опция оболочки execfail. В этом случае он возвращает отказ. Интерактивная оболочка возвращает ошибку, если файл не может быть выполнен. Подоболочка безоговорочно завершает работу, если exec терпит неудачу. Если команда не указана, любые перенаправления вступают в силу в текущей оболочке, а статус возврата равен 0. В случае ошибки перенаправления статус возврата равен 1.

exit [n]

Вызывает выход оболочки со статусом n. Если n опущен, статус выхода соответствует статусу последней выполненной команды. Ловушка на EXIT выполняется до завершения работы оболочки.

export [-fn ] [name[=word]] ...
export -p

Предоставленные имена помечены для автоматического экспорта в среду последующих выполняемых команд. Если указана опция -f, имена относятся к функциям. Если имена не указаны или указана опция -p, печатается список имен всех экспортируемых переменных. Параметр -n приводит к удалению свойства экспорта из каждого имени. Если за именем переменной следует =word, значение переменной устанавливается на word. export возвращает статус выхода 0, если не встречается недопустимая опция, одно из имен не является допустимым именем переменной оболочки или -f поставляется с именем, которое не является функцией.

fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]

Первая форма выбирает диапазон команд от первой до последней из списка истории и отображает или редактирует и повторно выполняет их. First и last могут быть указаны как строка (чтобы найти последнюю команду, начинающуюся с этой строки) или как число (индекс в списке истории, где отрицательное число используется как смещение от текущего номера команды). В списке первый или последний 0 эквивалентен -1, а -0 эквивалентен текущей команде (обычно это команда fc). ; в противном случае 0 эквивалентен -1, а -0 недействителен. Если последняя не указана, она устанавливается на текущую команду для вывода в список (так что ``fc -l -10'' печатает последние 10 команд) и на первую в противном случае. Если first не указан, для редактирования используется предыдущая команда, а для вывода -16.

Опция -n скрывает номера команд при выводе списка. Параметр -r меняет порядок команд на обратный. Если указана опция -l, команды выводятся в стандартный вывод. В противном случае редактор, заданный ename, вызывается для файла, содержащего эти команды. Если ename не указано, используется значение переменной FCEDIT и значение EDITOR, если FCEDIT не установлен. Если ни одна из переменных не установлена, используется  vi . Когда редактирование завершено, отредактированные команды отображаются и выполняются.

Во второй форме command выполняется повторно после замены каждого экземпляра pat на rep. Command интерпретируется так же, как first выше. Полезным псевдонимом для этого является ``r="fc -s"'', так что ввод ``r cc'' запускает последнюю команду, начинающуюся с ``cc'', а ввод ``r'' выполняет повторно последняя команда.

Если используется первая форма, возвращаемое значение равно 0, если только не встречается недопустимая опция или first или last не указывают строки истории за пределами допустимого диапазона. Если указана опция -e, возвращаемое значение является значением последней выполненной команды или сбоя, если возникает ошибка с временным файлом команд. Если используется вторая форма, возвращается состояние повторного выполнения команды, если только cmd не указывает допустимую строку истории, и в этом случае fc возвращает ошибку.

fg [jobspec]

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

getopts optstring name [arg ...]

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

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

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

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

Для OPTIND задан индекс первого аргумента, не являющегося параметром, а для name задано значение ?.

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

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

Если виден неверный вариант, getopts помещает ? в name и, если не молчит, печатает сообщение об ошибке и сбрасывает OPTARG. Если getopts молчит, найденный символ параметра помещается в OPTARG и диагностическое сообщение не печатается.

Если обязательный аргумент не найден и getopts не молчат, в имя ставится вопросительный знак ( ? ), OPTARG не установлен, и печатается диагностическое сообщение. Если параметр getopts не задан, то в имя ставится двоеточие ( : ), а параметру OPTARG присваивается значение персонаж найден.

getopts возвращает значение true, если параметр, указанный или не указанный, найден. Он возвращает false, если встречается конец параметров или возникает ошибка.

hash [-lr] [-p filename] [-dt] [name]

Каждый раз, когда вызывается hash, полный путь команды name определяется путем поиска в каталогах в ` PATH и запоминается. Любое ранее запомненное имя пути отбрасывается. Если указан параметр -p, поиск пути не выполняется, а в качестве полного имени файла команды используется имя файла. Параметр -r заставляет оболочку забыть все запомненные местоположения. Параметр -d заставляет оболочку забыть запомненное местоположение каждого имени. Если указана опция -t, печатается полный путь, которому соответствует каждое имя. Если несколько аргументов name указаны с -t, name печатается перед хэшированным полным путем. Параметр -l приводит к отображению вывода в формате, который можно повторно использовать в качестве ввода. Если аргументы не указаны или указан только -l, выводится информация о запомненных командах. Статус возврата — true, если имя не найдено или не указан недопустимый параметр.

help [-dms] [pattern]

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

-d

Показать краткое описание каждого шаблона

-m

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

-s

Отображать только краткий обзор использования для каждого шаблона

Статус возврата равен 0, если ни одна команда не соответствует шаблону.

history [n]
history -c
history -d offset
history -d start-end
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]

Без параметров отображать список истории команд с номерами строк. Строки, отмеченные знаком *, были изменены. Аргумент n перечисляет только последние n строки. Если переменная оболочки HISTTIMEFORMAT установлена и не равна нулю, она используется в качестве строки формата для strftime(3) для отображения соответствующей отметки времени с каждой отображаемой записью истории. Между отформатированной отметкой времени и строкой истории не печатается промежуточный пробел. Если задано имя файла, оно используется как имя файла истории; если нет, используется значение HISTFILE. Опции, если они предоставлены, имеют следующие значения:

-c

Очистите список истории, удалив все записи.

-d offset

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

-d start-end

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

-a

Добавьте «новые» строки истории в файл истории. Это строки истории, введенные с начала текущего сеанса bash, но еще не добавленные в файл истории.

-n

Считайте строки истории, которые еще не были прочитаны из файла истории, в текущий список истории. Это строки, добавленные к файлу истории с начала текущего сеанса bash.

-r

Прочитайте содержимое файла истории и добавьте его в текущий список истории.

-w

Запишите текущий список истории в файл истории, перезаписав содержимое файла истории.

-p

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

-s

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

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

jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]

В первой форме перечислены активные вакансии. Опции имеют следующие значения:

-l

Перечислите идентификаторы процессов в дополнение к обычной информации.

-n

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

-p

Укажите только идентификатор процесса лидера группы процессов задания.

-r

Отображать только запущенные задания.

-s

Отображать только остановленные задания.

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

Если указан параметр -x, jobs заменяет все спецификации_задания, найденные в command или args . с соответствующим идентификатором группы процессов и выполняет команду, передавая ей аргументы и возвращая статус выхода.

kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l|-L [sigspec | exit_status]

Отправьте сигнал с именем sigspec или signum процессам с именем pid или jobspec. sigspec — это либо имя сигнала без учета регистра, например SIGKILL (с префиксом SIG или без него), либо номер сигнала; signum – это номер сигнала. Если sigspec отсутствует, предполагается SIGTERM. Аргумент -l перечисляет имена сигналов. Если при указании -l передаются какие-либо аргументы, перечисляются имена сигналов, соответствующих аргументам, и возвращается статус 0. Аргумент exit_status to -l — это число, указывающее либо номер сигнала, либо статус выхода процесса, завершенного сигналом. Параметр -L эквивалентен -l. kill возвращает true, если хотя бы один сигнал был успешно отправлен, или false, если произошла ошибка или встречается неверный вариант.

let arg [arg ...]

Каждый arg представляет собой арифметическое выражение, которое нужно вычислить (см. АРИФМЕТИЧЕСКОЕ ВЫЧИСЛЕНИЕ выше). Если последний arg оценивается как 0, let возвращает 1; 0 возвращается в противном случае.

local [option] [name[=value] ... | - ]

Для каждого аргумента создается локальная переменная с именем имя, которой присваивается значение. option может быть любой из опций, принятых в declare. Когда внутри функции используется local, это приводит к тому, что переменная name, чтобы иметь видимую область, ограниченную этой функцией и ее дочерними элементами. Если имя равно -, набор параметров оболочки делается локальным для функции, в которой вызывается local: параметры оболочки изменяются с помощью set, встроенные внутри функции, восстанавливаются до своих исходных значений, когда функция возвращается. Восстановление выполняется так, как если бы была выполнена серия установочных команд для восстановления значений, которые были на месте до выполнения функции. Без операндов local записывает список локальных переменных в стандартный вывод. Использование local вне функции является ошибкой. Статус возврата равен 0, если только local не используется вне функции, не указано недопустимое name или name не является переменной, доступной только для чтения.

logout

Выйдите из оболочки входа.

mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

Чтение строк из стандартного ввода в переменную индексированного массива array или из файлового дескриптора fd, если указана опция -u. Переменная MAPFILE является массивом по умолчанию. Параметры, если они указаны, имеют следующие значения:

-d

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

-n

Скопируйте не более count строк. Если count равно 0, копируются все строки.

-O

Начните присваивать массиву с индекса origin. Индекс по умолчанию равен 0.

-s

Отбрасывать первые количество прочитанных строк.

-t

Удалите завершающий разделитель (перевод строки по умолчанию) из каждой прочитанной строки.

-u

Читать строки из файлового дескриптора fd вместо стандартного ввода.

-C

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

-c

Укажите количество строк, читаемых между каждым вызовом обратного вызова.

Если -C указан без -c, квант по умолчанию равен 5000. Когда оценивается обратный вызов, ему предоставляется индекс следующий элемент массива, который будет назначен, и строка, которая будет назначена этому элементу в качестве дополнительных аргументов. обратный вызов оценивается после чтения строки, но до назначения элемента массива.

Если не указано явное происхождение, mapfile очистит массив перед назначением ему.

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

popd [-n] [+n] [-n]

Удаляет записи из стека каталогов. Без аргументов удаляет верхний каталог из стека и выполняет cd в новый верхний каталог. Аргументы, если они предоставлены, имеют следующие значения:

-n

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

+n

Удаляет nя запись слева в списке, показанном каталогами, начиная с нуля. Например: ``popd +0'' удаляет первый каталог, ``popd +1'' второй.

-n

Удаляет n-ю запись справа в списке, отображаемом dirs, начиная с нуля. Например: ``popd -0'' удаляет последний каталог, ``popd -1'' предпоследний.

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

printf [-v var] format [arguments]

Запишите отформатированные аргументы в стандартный вывод под контролем format. Параметр -v приводит к тому, что вывод назначается переменной var, а не печатается в стандартный вывод.

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

%b

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

%q

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

%(datefmt)T

заставляет printf выводить строку даты и времени, полученную в результате использования datefmt в качестве строки формата для strftime (3). Соответствующий аргумент представляет собой целое число, представляющее количество секунд с начала эпохи. Можно использовать два специальных значения аргумента: -1 представляет текущее время, а -2 представляет время вызова оболочки. Если аргумент не указан, преобразование ведет себя так, как если бы было задано значение -1. Это исключение из обычного поведения printf.

Директивы %b, %q и %T используют аргументы ширины и точности поля из спецификации формата и записывают столько же байтов из расширенного аргумента (или используют это поле для расширения), который обычно содержит больше символов, чем исходный. .

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

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

pushd [-n] [+n] [-n]
pushd [-n] [dir]

Добавляет каталог на вершину стека каталогов или вращает стек, делая новую вершину стека текущим рабочим каталогом. Без аргументов pushd меняет местами два верхних каталога и возвращает 0, если только стек каталогов не пуст. Аргументы, если они предоставлены, имеют следующие значения:

-n

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

+n

Переворачивает стек таким образом, чтобы nй каталог (считая слева в списке, показанном dirs, начиная с нуля) был вверху .

-n

Переворачивает стек таким образом, чтобы nй каталог (считая справа в списке, показанном dirs, начиная с нуля) был вверху .

dir

Добавляет dir в стек каталогов вверху, делая его новым текущим рабочим каталогом, как если бы он был указан в качестве аргумента встроенной функции cd.

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

pwd [-LP]

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

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

Одна строка читается из стандартного ввода или из файлового дескриптора fd, предоставленного в качестве аргумента для параметра -u, разбитого на слова, как описано выше в разделе Word. Разделение, и первое слово присваивается первому имени, второе слово — второму имени и так далее. Если слов больше, чем имен, оставшиеся слова и разделители между ними назначаются последнему имени. Если из входного потока считано меньше слов, чем имен, оставшимся именам присваиваются пустые значения. Символы в IFS используются для разделения строки на слова с использованием тех же правил, которые оболочка использует для расширения (описанных выше в разделе Разделение слов). Символ обратной косой черты ( \) может использоваться для удаления любого специального значения для следующего прочитанного символа и для продолжения строки. Опции, если они предоставлены, имеют следующие значения:

-a aname

Слова присваиваются последовательным индексам переменной массива aname, начиная с 0. aname сбрасывается до присвоения каких-либо новых значений. Другие аргументы name игнорируются.

-d delim

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

-e

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

-i text

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

-n nchars

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

-N nchars

read возвращает результат после чтения ровно nchars символов, а не ожидания полной строки ввода, за исключением случаев, когда встречается EOF или истечет время чтения. Знаки-разделители, встречающиеся во входных данных, не обрабатываются особым образом и не приводят к возврату read до тех пор, пока не будут прочитаны символы nchars. Результат не разбивается на символы в IFS; цель заключается в том, что переменной присваиваются точно считанные символы (за исключением обратной косой черты; см. параметр -r ниже).

-p prompt

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

-r

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

-s

Бесшумный режим. Если ввод поступает с терминала, символы не отображаются.

-t timeout

Вызывает тайм-аут чтения и возвращает ошибку, если вся строка ввода (или заданное количество символов) не читается в течение тайм-аута секунд. время ожидания может быть десятичным числом с дробной частью после десятичной точки. Этот параметр эффективен только в том случае, если read читает ввод из терминала, канала или другого специального файла; это не имеет никакого эффекта при чтении из обычных файлов. Если время чтения истекло, чтение сохраняет любой частичный ввод, прочитанный, в указанную переменную name. Если время ожидания равно 0, функция чтения возвращается немедленно, без попыток прочитать какие-либо данные. Статус выхода равен 0, если для указанного файлового дескриптора доступны входные данные, в противном случае ненулевое значение. Состояние выхода больше 128, если время ожидания превышено.

-u fd

Чтение входных данных из файлового дескриптора fd.

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

readonly [-aAf] [-p] [name[=word] ...]

Указанные имена помечены как доступные только для чтения; значения этих имен не могут быть изменены последующим назначением. Если указана опция -f, функции, соответствующие именам, помечаются так. Опция -a ограничивает переменные индексированными массивами; параметр -A ограничивает переменные ассоциативными массивами. Если указаны оба параметра, приоритет имеет -A. Если аргументы name не указаны или указана опция -p, печатается список всех имен, доступных только для чтения. Другие параметры могут использоваться для ограничения вывода подмножеством набора имен, доступных только для чтения. Параметр -p приводит к отображению вывода в формате, который можно повторно использовать в качестве ввода. Если за именем переменной следует =word, значением переменной будет word. Возврат статус равен 0, если только не встречается недопустимая опция, одно из имен не является допустимым именем переменной оболочки или -f не указывается имя > это не функция.

return [n]

Заставляет функцию прекратить выполнение и вернуть вызывающей стороне значение, указанное параметром n. Если n опущено, возвращается статус последней команды, выполненной в теле функции. Если return выполняется обработчиком прерывания, последней командой, используемой для определения состояния, является последняя команда, выполненная перед обработчиком прерывания. Если return выполняется во время ловушки DEBUG, последней командой, используемой для определения состояния, является последняя команда, выполненная обработчиком ловушки перед вызовом return. Если return используется вне функции, но во время выполнения скрипта командой . (source) интерпретатор прекращает выполнение этого скрипта и возвращает либо n или статус выхода последней команды, выполненной в скрипте, в качестве статуса выхода скрипта. Если указано n, возвращаемым значением являются младшие значащие 8 бит. Статус возврата не равен нулю, если return имеет нечисловой аргумент или используется вне функции, а не во время выполнения скрипта . или источник. Любая команда, связанная с ловушкой RETURN, выполняется до возобновления выполнения после функции или сценария.

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

Без опций имя и значение каждой переменной оболочки отображаются в формате, который можно повторно использовать в качестве входных данных для установки или сброса текущих установленных переменных. Переменные только для чтения не могут быть сброшены. В режиме posix перечислены только переменные оболочки. Вывод сортируется в соответствии с текущей локалью. Когда параметры указаны, они устанавливают или сбрасывают атрибуты оболочки. Любые аргументы, оставшиеся после обработки параметров, обрабатываются как значения позиционных параметров и назначаются по порядку $1, $2, ... $n. Параметры, если они указаны, имеют следующие значения:

-a

Каждая создаваемая или изменяемая переменная или функция получает атрибут экспорта и помечается для экспорта в среду последующих команд.

-b

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

-e

Немедленно выйти, если конвейер (который может состоять из одной простой команды), список или составная команда (см. ГРАММАРИКУ ОБОЛОЧКИ выше) завершается с ненулевым статусом. Оболочка не завершается, если команда, которая не удалась, является частью списка команд, следующего за ключевым словом while или until, частью теста, следующего за ключевым словом if зарезервированные слова или elif, часть любой команды, выполняемой в списке && или ||, за исключением команды, следующей за последним && или ||, любая команда в конвейере, кроме последней, или если возвращаемое значение команды инвертируется с помощью !. Если составная команда, отличная от подоболочки, возвращает ненулевой статус из-за сбоя команды, в то время как -e игнорировалась, оболочка не завершается. Ловушка на ERR, если она установлена, выполняется перед выходом из оболочки. Этот параметр применяется к среде оболочки и к каждой среде подоболочки отдельно (см.

СРЕДА ВЫПОЛНЕНИЯ КОМАНД выше), и может вызвать выход из подоболочек до выполнения всех команд в подоболочке.

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

-f

Отключить расширение имени пути.

-h

Запомните расположение команд, когда они ищутся для выполнения. Это включено по умолчанию.

-k

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

-m

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

-n

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

-o option-name

название параметра может быть одним из следующих:

allexport

То же, что и -a.

braceexpand

То же, что и -B.

emacs

Используйте интерфейс редактирования командной строки в стиле emacs. Это включено по умолчанию, когда оболочка интерактивна, если оболочка не запущена с параметром --noediting. Это также влияет на интерфейс редактирования, используемый для read -e.

errexit

То же, что и -e.

errtrace

То же, что и -E.

functrace

То же, что и -T.

hashall

То же, что и -h.

histexpand

То же, что и -H.

history

Включите историю команд, как описано выше в разделе ИСТОРИЯ. Этот параметр включен по умолчанию в интерактивных оболочках.

ignoreeof

Эффект такой же, как если бы была выполнена команда оболочки ``IGNOREEOF=10'' (см. Переменные оболочки выше).

keyword

То же, что и -k.

monitor

То же, что и -m.

noclobber

То же, что и -C.

noexec

То же, что и -n.

noglob

То же, что и -f.

nolog

В настоящее время игнорируется.

notify

То же, что и -b.

nounset

То же, что и -u.

onecmd

То же, что и -t.

physical

То же, что и -P.

pipefail

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

posix

Измените поведение bash, если операция по умолчанию отличается от стандарта POSIX, чтобы она соответствовала стандарту (режим posix). См. СМ. ТАКЖЕ ниже для ссылки на документ, в котором подробно описывается, как режим posix влияет на поведение bash.

privileged

То же, что и -p.

verbose

То же, что и -v.

vi

Используйте интерфейс редактирования командной строки в стиле vi. Это также влияет на интерфейс редактирования, используемый для read -e.

xtrace

То же, что и -x.

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

-p

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

-t

Выйти после прочтения и выполнения одной команды.

-u

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

-v

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

-x

После раскрытия каждой простой команды, для команды, команды case, команды select или арифметической для команды отобразите развернутое значение< PS4, за которым следует команда и ее расширенные аргументы или связанный список слов.

-B

Оболочка выполняет раскрытие скобок (см. Расширение скобок выше). Это включено по умолчанию.

-C

Если установлено, bash не перезаписывает существующий файл с операторами перенаправления >, >& и <>. . Это может быть переопределено при создании выходных файлов с использованием оператора перенаправления >| вместо >.

-E

Если установлено, любая ловушка ERR наследуется функциями оболочки, подстановками команд и командами, выполняемыми в среде подоболочки. Ловушка ERR обычно не наследуется в таких случаях.

-H

Включить подстановку истории стилей !. Этот параметр включен по умолчанию, когда оболочка интерактивна.

-P

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

-T

Если установлено, любые ловушки на DEBUG и RETURN наследуются функциями оболочки, подстановками команд и командами, выполняемыми в среде подоболочки. Ловушки DEBUG и RETURN обычно не наследуются в таких случаях.

--

Если за этой опцией не следуют никакие аргументы, то позиционные параметры не устанавливаются. В противном случае позиционные параметры устанавливаются на arg, даже если некоторые из них начинаются с -.

-

Сообщите об окончании опций, чтобы все оставшиеся аргументыназначались позиционным параметрам. Параметры -x и -v отключены. Если нет arg, позиционные параметры остаются неизменными.

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

shift [n]

Позиционные параметры из n+1 ... переименовываются в $1 .... Параметры, представленные числа $# до $#-n+1 не установлены. n должно быть неотрицательным числом, меньшим или равным $#. Если n равно 0, никакие параметры не изменяются. Если n не задано, предполагается, что оно равно 1. Если n больше, чем $#, позиционные параметры не изменяются. статус возврата больше нуля, если n больше $# или меньше нуля; иначе 0.

shopt [-pqsu] [-o] [optname ...]

Переключите значения параметров, управляющих дополнительным поведением оболочки. Параметры могут быть либо перечисленными ниже, либо, если используется параметр -o, доступными с параметром -o встроенной команды set.< Без параметров или с параметром -p отображается список всех устанавливаемых параметров с указанием того, установлен ли каждый из них; если указаны optnames, выходные данные ограничиваются этими параметрами. Параметр -p приводит к тому, что выходные данные отображаются в форме, которую можно использовать повторно в качестве ввода. Другие опции имеют следующие значения:

-s

Включить (установить) каждое optname.

-u

Отключить (сбросить) все optname.

-q

Подавляет нормальный вывод (тихий режим); статус возврата указывает, установлено ли значение параметра optname или нет. Если указано несколько аргументов optname с -q, статус возврата равен нулю, если включены все optnames; ненулевое иначе.

-o

Ограничивает значения optname значениями, определенными для параметра -o, встроенной функцией set.

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

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

Список вариантов магазина:

assoc_expand_once

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

autocd

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

cdable_vars

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

cdspell

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

checkhash

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

checkjobs

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

checkwinsize

Если установлено, bash проверяет размер окна после каждой внешней (не встроенной) команды и при необходимости обновляет значения LINES и COLUMNS. . Эта опция включена по умолчанию.

cmdhist

Если установлено, bash пытается сохранить все строки многострочной команды в одной и той же записи истории. Это позволяет легко повторно редактировать многострочные команды. Этот параметр включен по умолчанию, но действует только в том случае, если включена история команд, как описано выше в разделе ИСТОРИЯ.

compat31
compat32
compat40
compat41
compat42
compat43
compat44

Эти аспекты управляют режимом совместимости оболочки (см. РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ ниже).

complete_fullquote

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

direxpand

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

dirspell

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

dotglob

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

execfail

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

expand_aliases

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

extdebug

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

1.

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

2.

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

3.

Если команда, запускаемая ловушкой DEBUG, возвращает значение 2, а оболочка выполняется в подпрограмме (функция оболочки или сценарий оболочки, выполняемый . или встроенными функциями исходного кода), оболочка имитирует вызов return.

4.

BASH_ARGC и BASH_ARGV обновляются, как описано в их описаниях выше.

5.

Включена трассировка функций: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью ( command ), наследуют ловушки DEBUG и RETURN.

6.

Отслеживание ошибок включено: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью ( command ), наследуют ловушку ERR.

extglob

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

extquote

Если установлено, $'string' и $"string" заключаются в кавычки. внутри $ {параметров} расширений, заключенных в двойные кавычки. Эта опция включена по умолчанию.

failglob

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

force_fignore

Если установлено, суффиксы, указанные в переменной оболочки FIGNORE, приводят к тому, что слова игнорируются при выполнении завершения слов, даже если игнорируемые слова являются единственными возможными вариантами завершения. См. ПЕРЕМЕННЫЕ ОБОЛОЧКИ выше для описания FIGNORE. Эта опция включена по умолчанию.

globasciiranges

Если установлено, выражения диапазона, используемые в выражениях со скобками для сопоставления с образцом (см. Сопоставление с образцом выше), при выполнении сравнений ведут себя как в традиционной локали C. То есть последовательность сортировки текущей локали не учитывается, поэтому b не будет сортировать между A и B, а верхний регистр и строчные символы ASCII будут сопоставляться вместе.

globstar

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

gnu_errfmt

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

histappend

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

histreedit

Если установлено и используется readline, пользователю предоставляется возможность повторно отредактировать неудачную замену истории.

histverify

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

hostcomplete

Если установлено и используется readline, bash попытается выполнить завершение имени хоста, когда завершается слово, содержащее @ (см. >Завершение в разделе READLINE выше). Это включено по умолчанию.

huponexit

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

inherit_errexit

Если установлено, подстановка команд наследует значение параметра errexit, а не сбрасывает его в среде подоболочки. Этот параметр активен, когда включен режим posix.

interactive_comments

Если установлено, разрешается слово, начинающееся с #, чтобы это слово и все остальные символы в этой строке игнорировались в интерактивной оболочке (см. КОММЕНТАРИИ выше). Эта опция включена по умолчанию.

lastpipe

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

lithist

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

localvar_inherit

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

localvar_unset

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

login_shell

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

mailwarn

Если установлено, и к файлу, который bash проверяет на наличие почты, обращались с момента последней проверки, сообщение ``Почта в mailfile была отображается "прочитано".

no_empty_cmd_completion

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

nocaseglob

Если установлено, bash сопоставляет имена файлов без учета регистра при расширении пути (см. Расширение пути выше).

nocasematch

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

nullglob

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

progcomp

Если установлено, программируемые средства завершения (см. Программируемое завершение выше) включены. Этот параметр включен по умолчанию.

progcomp_alias

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

promptvars

Если установлено, строки подсказок подвергаются расширению параметров, подстановке команд, арифметическому расширению и удалению кавычек после расширения, как описано в разделе ЗАПРОСЫ выше. Эта опция включена по умолчанию.

restricted_shell

Оболочка устанавливает этот параметр, если она запущена в ограниченном режиме (см. ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже). Значение не может быть изменено. Это не сбрасывается при выполнении файлов запуска, что позволяет файлам запуска определять, ограничена ли оболочка.

shift_verbose

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

sourcepath

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

xpg_echo

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

suspend [-f]

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

test expr
[ expr ]

Возвращает статус 0 (истина) или 1 (ложь) в зависимости от оценки условного выражения expr. Каждый оператор и операнд должны быть отдельным аргументом.

УСЛОВНЫЕ ВЫРАЖЕНИЯ. test не принимает никаких опций, а также не принимает и не игнорирует аргумент -- как означающий конец опций.

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

! expr

Истинно, если expr имеет значение false.

( expr )

Возвращает значение expr. Это может использоваться для переопределения обычного приоритета операторов.

expr1 -a expr2

Истинно, если и expr1, и expr2 истинны.

expr1 -o expr2

Истинно, если либо expr1, либо expr2 истинно.

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

0 arguments

Выражение неверно.

1 argument

Выражение истинно тогда и только тогда, когда аргумент не равен нулю.

2 arguments

Если первый аргумент равен !, выражение истинно тогда и только в том случае, если второй аргумент равен null. Если первый аргумент является одним из унарных условных операторов, перечисленных выше в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ, выражение истинно, если унарный тест верен. Если первый аргумент не является допустимым унарным условным оператором, выражение ложно.

3 arguments

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

4 arguments

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

5 or more arguments

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

При использовании с test или [ операторы < и > сортируют лексикографически, используя порядок ASCII.

times

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

trap [-lp] [[arg] sigspec ...]

Команда arg должна быть прочитана и выполнена, когда оболочка получит сигнал(ы) sigspec. Если arg отсутствует (и есть один sigspec) или -, каждый указанный сигнал сбрасывается на свое первоначальное расположение (значение, которое оно имело при входе в оболочку). Если arg является нулевой строкой, сигнал, указанный каждым sigspec, игнорируется оболочкой и вызываемыми ею командами. Если arg отсутствует и указан -p, отображаются команды прерывания, связанные с каждым sigspec. Если аргументы не указаны или указан только -p, trap выводит список команд, связанных с каждым сигналом. Параметр -l заставляет оболочку распечатать список имен сигналов и соответствующих им номеров. Каждое sigspec является либо именем сигнала, определенным в <signal.h>, либо номером сигнала. Имена сигналов нечувствительны к регистру, а SIG указывать необязательно.

Если sigspec имеет значение EXIT (0), команда arg выполняется при выходе из оболочки. Если sigspec имеет значение DEBUG, команда arg выполняется перед каждой простой командой, Команда для, команда case, команда выбрать, все арифметические для команды и перед выполнением первой команды в функции оболочки (см. ГРАММАРИКУ ОБОЛОЧКИ выше). Обратитесь к описанию параметра extdebug встроенного shopt для получения подробной информации о его влиянии на ловушку DEBUG. Если sigspec RETURN, команда arg выполняется каждый раз, когда функция оболочки или скрипт выполняется с параметром . или исходные встроенные функции завершают выполнение.

Если sigspec имеет значение ERR, команда arg выполняется всякий раз, когда конвейер (который может состоять из одной простой команды), список или составная команда возвращает ненулевой статус выхода при соблюдении следующих условий. Ловушка ERR не выполняется, если неудачная команда является частью списка команд, следующего за ключевым словом while или until, частью теста в оператор if, часть команды, выполняемой в списке && или ||, за исключением команды, следующей за последним && или || , любая команда в конвейере, кроме последней, или если возвращаемое значение команды инвертируется с помощью !. Это те же условия, которым подчиняется параметр errexit (-e).

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

type [-aftpP] name [name ...]

Без параметров укажите, как будет интерпретироваться каждое имя, если оно используется в качестве имени команды. Если используется параметр -t, type печатает строку, которая является одним из следующих вариантов: псевдоним, ключевое слово, функция, встроенная или файл, если имя является псевдонимом, зарезервированным словом оболочки, функцией, встроенной функцией или файлом на диске, соответственно. Если имя не найдено, ничего не печатается и возвращается статус выхода false. Если используется параметр -p, type либо возвращает имя файла на диске, который был бы выполнен, если бы в качестве имени команды было указано name. , или ничего, если ``type -t name'' не возвращает файл. Параметр -P инициирует поиск по ПУТИ для каждого имени, даже если ``введите -t имя'' не возвращает файл. Если команда хэшируется, -p и -P выводят хешированное значение, которое не обязательно является файлом, который появляется первым в PATH. Если используется параметр -a, type выводит все места, содержащие исполняемый файл с именем name. Сюда входят псевдонимы и функции, если и только если не используется параметр -p. Таблица хешированных команд не используется при использовании -a. Параметр -f подавляет поиск функции оболочки, как и в случае встроенной команды. type возвращает значение true, если найдены все аргументы, и значение false, если они есть. не найдены.

ulimit [-HS] -a
ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [limit]]

Обеспечивает контроль над ресурсами, доступными для оболочки и запускаемых ею процессов, в системах, допускающих такой контроль. Параметры -H и -S указывают, что для данного ресурса установлено жесткое или мягкое ограничение. Жесткий предел не может быть увеличен пользователем без полномочий root после его установки; мягкое ограничение может быть увеличено до значения жесткого ограничения. Если не указано ни -H, ни -S, устанавливаются как мягкие, так и жесткие ограничения. Значением limit может быть число в единицах измерения, указанных для ресурса, или одно из специальных значений hard, soft или . без ограничений, которые обозначают текущий жесткий лимит, текущий мягкий лимит и отсутствие лимита соответственно. Если limit не указан, печатается текущее значение мягкого ограничения ресурса, если не задана опция -H. Если указано более одного ресурса, имя ограничения и единица измерения, если это необходимо, печатаются перед значением. Другие варианты интерпретируются следующим образом:

-a

Сообщаются все текущие лимиты; лимиты не установлены

-b

Максимальный размер буфера сокета

-c

Максимальный размер создаваемых файлов ядра

-d

Максимальный размер сегмента данных процесса

-e

Максимальный приоритет планирования («хороший»)

-f

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

-i

Максимальное количество отложенных сигналов

-k

Максимальное количество kqueue, которое может быть выделено

-l

Максимальный размер, который может быть заблокирован в памяти

-m

Максимальный размер резидентного набора (многие системы не соблюдают этот предел)

-n

Максимальное количество дескрипторов открытых файлов (большинство систем не позволяют устанавливать это значение)

-p

Размер пайпа в блоках по 512 байт (можно не задавать)

-q

Максимальное количество байтов в очередях сообщений POSIX

-r

Максимальный приоритет планирования в реальном времени

-s

Максимальный размер стека

-t

Максимальное количество процессорного времени в секундах

-u

Максимальное количество процессов, доступных одному пользователю

-v

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

-x

Максимальное количество блокировок файлов

-P

Максимальное количество псевдотерминалов

-R

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

-T

Максимальное количество потоков

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

umask [-p] [-S] [mode]

Для пользовательской маски создания файлов задан режим. Если mode начинается с цифры, она интерпретируется как восьмеричное число; в противном случае он интерпретируется как символьная маска режима, аналогичная той, которая принимается chmod(1). Если mode не указан, печатается текущее значение маски. Параметр -S приводит к тому, что маска печатается в символьной форме; вывод по умолчанию - восьмеричное число. Если указан параметр -p и mode опущен, выходные данные имеют форму, которую можно повторно использовать в качестве входных данных. Статус возврата равен 0, если режим был успешно изменен или аргумент mode не указан, и false в противном случае.

unalias [-a] [name ...]

Удалите каждое имя из списка определенных псевдонимов. Если указан -a, все определения псевдонимов удаляются. Возвращаемое значение равно true, если предоставленное имя не является определенным псевдонимом.

unset [-fv] [-n] [name ...]

Для каждого имени удалите соответствующую переменную или функцию. Если указана опция -v, каждое имя ссылается на переменную оболочки, и эта переменная удаляется. Переменные только для чтения нельзя сбрасывать. Если указан -f, каждое имя относится к функции оболочки, а определение функции удаляется. Если указан параметр -n и name является переменной с атрибутом nameref, name будет удалена, а не переменная, на которую он ссылается. -n не действует, если указан параметр -f.

Если параметры не указаны, каждое имя относится к переменной; если нет переменной с таким именем, функция с таким именем, если таковая имеется, не задана. Каждая неустановленная переменная или функция удаляется из среды, передаваемой последующим командам. Если любой из BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, >BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME , ГРУППЫ, HISTCMD, LINENO, СЛУЧАЙНЫЕ, СЕКУНДЫ или >SRANDOM не установлены, они теряют свои специальные свойства, даже если их впоследствии сбросить.

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

wait [-fn] [-p varname] [id ...]

Дождитесь каждого указанного дочернего процесса и верните его статус завершения. Каждый id может быть идентификатором процесса или спецификацией задания; если указана спецификация задания, ожидаются все процессы в конвейере этого задания. Если id не указан, wait ожидает завершения всех запущенных фоновых заданий и подстановки последнего выполненного процесса, если его идентификатор процесса совпадает с $!,< и статус возврата равен нулю. Если указан параметр -n, wait ожидает одно задание из списка id или, если нет, id предоставляются для любого задания для завершения и возвращают его статус завершения. Если ни один из предоставленных аргументов не является дочерним элементом оболочки или если аргументы не предоставлены и оболочка не имеет неожидаемых дочерних элементов, статус выхода равен 127. Если указан параметр -p, процесс или задание идентификатор задания, для которого возвращается статус выхода, присваивается переменной varname, названной аргументом опции. Переменная будет сброшена изначально, до любого назначение. Это полезно, только если указана опция -n. Указание опции -f при включенном управлении заданиями заставляет ждать ждать id для завершения перед возвратом своего статуса вместо возврата при изменении статуса. Если id указывает несуществующий процесс или задание, возвращается статус 127. В противном случае возвращается статус завершения последнего ожидаемого процесса или задания.

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

В Bash-4.0 введена концепция «уровня совместимости оболочки», определяемая как набор опций для встроенных функций 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 — финальная версия, для которой будет отдельный шопт для предыдущей версии. Пользователи должны использовать BASH_COMPAT в bash-5.0 и более поздних версиях.

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

compat31
  • цитирование правой стороны оператора сопоставления регулярных выражений команды [[ (=~) не имеет особого эффекта

compat32
  • прерывание списка команд, такого как «a ; b ; c», вызывает выполнение следующей команды в списке (в bash-4.0 и более поздних версиях оболочка действует так, как если бы она получила прерывание, поэтому прерывание одной команды в списке прерывается выполнение всего списка)

compat40
  • операторы < и > команды [[ не учитывают текущую локаль при сравнении строк; они используют порядок ASCII. Версии Bash до bash-4.1 используют сопоставление ASCII и strcmp(3); bash-4.1 и более поздние версии используют последовательность сопоставления текущей локали и strcoll(3).

compat41
  • в режиме posix за временем могут следовать параметры, и оно по-прежнему будет распознаваться как зарезервированное слово (это интерпретация POSIX 267)

  • в режиме posix синтаксический анализатор требует, чтобы в части word слова, заключенного в двойные кавычки, было четное число одинарных кавычек. расширение параметров и обрабатывает их особым образом, так что символы в одинарных кавычках считаются заключенными в кавычки (это интерпретация POSIX 221)

compat42
  • строка замены в замене шаблона в двойных кавычках не удаляет кавычки, как это происходит в версиях после bash-4.2.

  • в режиме posix одинарные кавычки считаются особыми при расширении части word раскрытия параметра в двойных кавычках и могут использоваться для заключения в кавычки закрывающей фигурной скобки или другого специального символа (это является частью интерпретации POSIX 221); в более поздних версиях одинарные кавычки не являются особыми в расширениях слов с двойными кавычками.

compat43
  • оболочка не печатает предупреждающее сообщение, если делается попытка использовать составное присваивание в кавычках в качестве аргумента для объявления (declare -a foo='(1 2)'). Более поздние версии предупреждают, что это использование устарело.

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

  • при выполнении функции оболочки состояние цикла (пока/пока/и т. д.) не сбрасывается, поэтому break или continue в этой функции прерывают или продолжают циклы в вызывающем контексте. Bash-4.4 и более поздние версии сбрасывают состояние цикла, чтобы предотвратить это.

compat44
  • оболочка устанавливает значения, используемые BASH_ARGV и BASH_ARGC, чтобы они могли расширяться до позиционных параметров оболочки, даже если расширенный режим отладки не включен

  • подоболочка наследует циклы от своего родительского контекста, поэтому break или continue приведет к выходу подоболочки. Bash-5.0 и более поздние версии сбрасывают состояние цикла, чтобы предотвратить выход

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

compat50
  • Bash-5.1 изменил способ генерации $RANDOM, чтобы добавить больше случайности. Если уровень совместимости оболочки установлен на 50 или ниже, он возвращается к методу из bash-5.0 и предыдущих версий, поэтому заполнение генератора случайных чисел путем присвоения значения < RANDOM приведет к той же последовательности. как в bash-5.0/p>

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

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

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

  • изменение каталогов с помощью cd

  • установка или удаление значений SHELL, PATH, HISTFILE, ENV или BASH_ENV

  • указание имен команд, содержащих /

  • указание имени файла, содержащего /, в качестве аргумента встроенной команды .

  • указание имени файла, содержащего косую черту, в качестве аргумента встроенной команды history

  • указание имени файла, содержащего косую черту, в качестве аргумента параметра -p встроенной команды hash

  • импорт определений функций из среды оболочки при запуске

  • анализ значения SHELLOPTS из среды оболочки при запуске

  • перенаправление вывода с помощью операторов перенаправления >, >|, <>, >&, &> и >>

  • использование встроенной команды exec для замены оболочки другой командой

  • добавление или удаление встроенных команд с параметрами -f и -d во встроенную команду enable

  • с помощью включить встроенную команду, чтобы включить отключенные встроенные функции оболочки

  • указав параметр -p для встроенной команды command

  • отключение ограниченного режима с помощью set +r или set +o limited.

Эти ограничения вступают в силу после чтения любых файлов запуска.

rbash отключает любые ограничения в оболочке, созданной для выполнения скрипта.

СМОТРИТЕ ТАКЖЕ

Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE --

http://pubs.opengroup.org/onlinepubs/9699919799/

http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

ФАЙЛЫ

 /bin/bash 

Исполняемый файл bash

 /etc/profile 

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

 ~/.bash_profile 

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

 ~/.bashrc 

Индивидуальный файл запуска для интерактивной оболочки

 ~/.bash_logout 

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

 ~/.inputrc 

Отдельный файл инициализации readline

АВТОРЫ

Брайан Фокс, Фонд свободного программного обеспечения
bfox@gnu.org

Чет Рэми, Университет Кейс Вестерн Резерв
chet.ramey@case.edu

ОТЧЕТЫ ОБ ОШИБКАХ

Если вы обнаружили ошибку в bash, сообщите об этом. Но сначала вы должны убедиться, что это действительно ошибка и что она появилась в последней версии bash. Последняя версия всегда доступна на ftp://ftp.gnu.org/pub/gnu/bash/.

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

ВСЕ отчеты об ошибках должны включать:

The version number of bash
The hardware and operating system
The compiler used to compile
A description of the bug behaviour
A short script or `recipe' which exercises the bug

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

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

ОШИБКИ

Он слишком большой и слишком медленный.

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

Псевдонимы сбивают с толку в некоторых случаях.

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

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

Переменные массива нельзя (пока) экспортировать.

Одновременно может быть только один активный сопроцесс.