Linux — Unix команда: bash

Содержание

Команда Linux удар является ш-совместимый интерпретатор командного языка, который выполняет команды, считанные из стандартного ввода или из файла. удар также включает в себя полезные функции из оболочек Korn и C (КШ а также CSH).

Варианты Bash

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

  •  строка: если  опция присутствует, тогда команды читаются из строки. Если после строки есть аргументы, они присваиваются позиционным параметрам, начиная с $ 0.
  • : Если  опция присутствует, оболочка интерактивная.
  • -L: Сделать удар действовать так, как если бы он был вызван как оболочка для входа.
  • : Если  опция присутствует, оболочка становится ограниченной.
  • -s: Если -s опция присутствует, или если после обработки опции не осталось аргументов, команды считываются из стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки.
  • -D: Список всех строк в двойных кавычках, перед которыми стоит $ выводится на стандартный вывод. Это строки, которые подлежат языковому переводу, если текущая локаль не С или же POSIX. Это подразумевает —N вариант; никакие команды не будут выполнены.
  • [- +] O [shopt_option]: shopt_option является одним из параметров оболочки, принятых shopt встроенный. Если shopt_option присутствует,  устанавливает значение этой опции, и  снимает его Если shopt_option не указан, имена и значения параметров оболочки принимаются shopt печатаются на стандартном выходе. Если опция вызова , вывод отображается в формате, который можно использовать повторно в качестве ввода.
  • :   сигнализирует об окончании параметров и отключает дальнейшую обработку параметров. Любые аргументы после  обрабатываются как имена файлов и аргументы. Аргумент  эквивалентно .

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

  • —дамп-по-строк: Эквивалентно -D, но вывод находится в GNU gettext ро (переносимый объект) формат файла.
  • —дамп-стринг: Эквивалентно -D.
  • —Помогите: Отобразить сообщение об использовании на стандартном выходе и успешно завершиться.
  • —INIT-файл: Файл и —файл_конфигурации file: выполнение команд из файла вместо стандартного личного файла инициализации ~ / .bashrc, если оболочка является интерактивной.
  • —авторизоваться: Эквивалентно -L.
  • —noediting: Не используйте GNU Readline библиотека для чтения командных строк, когда оболочка является интерактивной.
  • —noprofile: Не читайте общесистемный файл запуска / etc / profile или какие-либо личные файлы инициализации ~ / .bash_profile, ~ / .bash_login или ~ / .profile. По умолчанию, удар читает эти файлы, когда он вызывается как оболочка входа.
  • —национальный научно-исследовательский океанографический центр: Не читайте и не выполняйте персональный файл инициализации ~ / .bashrc, если оболочка является интерактивной. Эта опция включена по умолчанию, если оболочка вызывается как ш.
  • —POSIX: Изменить поведение удар где операция по умолчанию отличается от стандарта POSIX для соответствия стандарту (режим posix).
  • —ограниченный: Оболочка становится ограниченной.
  • —мин-требует: Создайте список файлов, необходимых для запуска сценария оболочки. Это подразумевает ‘-n’ и подчиняется тем же ограничениям, что и проверка на ошибки времени компиляции; Backticks, [] тесты и evals не анализируются, поэтому некоторые зависимости могут быть пропущены. 
  • —подробный: Эквивалентно -v.
  • —версия: Показать информацию о версии для этого экземпляра удар на стандартном выходе и успешно завершите работу.

аргументы

Если аргументы остаются после обработки опций и ни  ни -s указана опция, в качестве первого аргумента предполагается имя файла, содержащего команды оболочки. Если удар вызывается таким образом, $ 0 устанавливается на имя файла, а позиционные параметры устанавливаются на остальные аргументы. удар читает и выполняет команды из этого файла; затем выходит. ударСостояние выхода — это состояние выхода последней команды, выполненной в скрипте. Если команды не выполняются, статус выхода равен 0. Сначала делается попытка открыть файл в текущем каталоге, и, если файл не найден, оболочка ищет каталоги в ДОРОЖКА для сценария.  

мольба

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

Интерактивная оболочка запускается без аргументов без опций и без  опция, стандартный вход и выход которой подключены к клеммам, как определено isatty (3), или одна, запущенная с  вариант. PS1 установлен и $ — включает, если bash является интерактивным, что позволяет сценарию оболочки или файлу запуска проверить это состояние.

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

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

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

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, удар читает и выполняет команды из ~ / .bashrc, если этот файл существует. Это может быть запрещено с помощью —национальный научно-исследовательский океанографический центр вариант. —файл_конфигурации опция файла заставит удар читать и выполнять команды из файла вместо ~ / .bashrc.

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

if [-n "$ BASH_ENV"]; тогда . "$ BASH_ENV"; фи

но ценность ДОРОЖКА переменная не используется для поиска имени файла.

Если удар вызывается с именем ш, он пытается имитировать поведение при запуске исторических версий ш настолько близко, насколько это возможно, и в то же время соответствует стандарту POSIX. Когда вызывается как интерактивная оболочка входа или неинтерактивная оболочка с —авторизоваться опция, сначала он пытается читать и выполнять команды из / etc / profile и ~ / .profile, в указанном порядке. —noprofile опция может быть использована для подавления этого поведения. Когда вызывается как интерактивная оболочка с именем ш, удар ищет переменную ENV, расширяет его значение, если оно определено, и использует расширенное значение в качестве имени файла для чтения и выполнения. Поскольку оболочка вызывается как ш не пытается читать и выполнять команды из любых других файлов запуска, —файл_конфигурации опция не имеет никакого эффекта. Неинтерактивная оболочка, вызываемая с именем ш не пытается читать другие файлы автозагрузки. Когда вызывается как шудар переходит в режим posix после чтения файлов запуска.

когда удар запускается в режиме posix, как с —POSIX опция командной строки, соответствует стандарту POSIX для файлов запуска. В этом режиме интерактивные оболочки расширяют ENV переменные и команды читаются и выполняются из файла, имя которого является расширенным значением. Другие файлы запуска не читаются.

удар пытается определить, когда он запускается демоном удаленной оболочки, обычно rshd. Если удар определяет, что он запускается rshd, он читает и выполняет команды из ~ / .bashrc, если этот файл существует и доступен для чтения. Это не будет делать, если вызывается как ш.  —национальный научно-исследовательский океанографический центр опция может быть использована для подавления этого поведения, а —файл_конфигурации Параметр может использоваться для принудительного чтения другого файла, но rshd обычно не вызывает оболочку с этими параметрами и не позволяет указывать их.

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

Определения

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

  • пустой: Пробел или табуляция.
  • слово: Последовательность символов, рассматриваемая оболочкой как единое целое. Также известный как знак.
  • имя: Слово, состоящее только из буквенно-цифровых символов и символов подчеркивания, начинающееся с буквенного символа или символа подчеркивания. Также упоминается как идентификатор.
  • МетасимволПерсонаж, который без кавычек разделяет слова. Одно из следующего: | ; () пробел
  • Оператор управления: Токен, который выполняет функцию управления. Это один из следующих символов: || ; ;; () |

Зарезервированные слова

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

! case do сделано elif else esac fi для функции if в select then до while {} time [[]]  

Грамматика оболочки: простые команды

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

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

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

Конвейер — это последовательность из одной или нескольких команд, разделенных символом |. Формат для конвейера [время [-п]] [! ] Команда [ | команда2 …].

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

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

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

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

Списки

Список — это последовательность одного или нескольких конвейеров, разделенных одним из операторов. ;, или же ||, и необязательно прекращается одним из ;, или же .

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

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

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

Операторы управления  а также || обозначают списки AND и OR, соответственно. Список AND имеет вид

command1  command2

Команда2 выполняется тогда и только тогда, когда команда1 возвращает нулевое состояние выхода.

ИЛИ список имеет форму

command1 || command2

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

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

Составная команда является одной из следующих:

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

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

((выражение)): выражение оценивается в соответствии с правилами, описанными в Арифметическая оценка. Если значение выражения не равно нулю, возвращаемое состояние равно 0; в противном случае возвращаемый статус равен 1. Это в точности эквивалентно позволять «Выражение».

[[Выражение]]: возвращать состояние 0 или 1 в зависимости от оценки выражения условного выражения. Выражения состоят из основных цветов, описанных ниже под Условные выражения. Разделение слов и расширение пути не выполняются над словами между [[ а также ]]; Выполняется расширение тильды, расширение параметров и переменных, арифметическое расширение, подстановка команд, подстановка процессов и удаление кавычек.

Когда == а также !знак равно используются операторы, строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными в Сопоставление с образцом. Возвращаемое значение равно 0, если строка соответствует или не соответствует шаблону, соответственно, и 1 в противном случае. Любая часть шаблона может быть заключена в кавычки, чтобы ее можно было сопоставить как строку.

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

  • (Выражение): возвращает значение выражения. Это может быть использовано для отмены нормального приоритета операторов.
  • ! expression: True, если выражение ложно.
  • выражение1  expression2: True, если и expression1, и expression2 имеют значение true.
  • выражение1 || expression2: True, если expression1 или expression2 имеет значение true.

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

  • за имя [ в слово ] ; делать список; сделанный: Список слов, следующих за в расширен, генерируя список элементов. Имя переменной задается для каждого элемента этого списка по очереди, и список выполняется каждый раз. Если в слово опущено, за Команда выполняет список один раз для каждого установленного позиционного параметра. Статус возврата — это статус выхода последней команды, которая выполняется. Если расширение пунктов после в приводит к пустому списку, команды не выполняются, а статус возврата равен 0.
  • за ((Expr1; expr2; expr3)); делать список; сделанный: Сначала арифметическое выражение expr1 оценивается в соответствии с правилами, описанными в Арифметическая оценка. Арифметическое выражение expr2 затем оценивается многократно, пока оно не станет равным нулю. Каждый раз, когда expr2 оценивается как ненулевое значение, выполняется список и вычисляется арифметическое выражение expr3. Если какое-либо выражение опущено, оно ведет себя так, как будто оно оценивается как 1. Возвращаемое значение является состоянием выхода последней команды в списке, которая выполняется, или false, если какое-либо из выражений является недопустимым.
  • Выбрать имя [ в слово ] ; делать список; сделанный: Список слов, следующих за в расширен, генерируя список элементов. Набор расширенных слов напечатан на стандартной ошибке, каждому из которых предшествует число. Если в слово опущено, позиционные параметры напечатаны. PS3 Затем отобразится приглашение и строка будет считана из стандартного ввода. Если строка состоит из числа, соответствующего одному из отображаемых слов, этому значению присваивается значение имени. Если строка пуста, слова и подсказка отображаются снова. Если EOF читается, команда завершается. Любое другое прочитанное значение приводит к тому, что name устанавливается в null. Считанная строка сохраняется в переменной ОТВЕТИТЬ. Список выполняется после каждого выбора до сломать Команда выполнена. Статус выхода Выбрать это состояние выхода последней команды, выполненной в списке, или ноль, если команды не были выполнены.
  • кейс слово в [ [(] шаблон [ | шаблон]: A кейс Команда сначала раскрывает слово и пытается сопоставить его с каждым шаблоном по очереди, используя те же правила сопоставления, что и при расширении пути. Когда совпадение найдено, соответствующий список выполняется. После первого матча никакие последующие совпадения не предпринимаются. Статус выхода равен нулю, если шаблон не соответствует. В противном случае это статус завершения последней команды, выполненной в списке.
  • если список; тогда список; а также [ Элиф список; тогда список; ] … [ еще список; ] фи:  если список выполнен. Если его статус выхода равен нулю, тогда список выполнен. В противном случае каждый Элиф список выполняется по очереди, и если его статус выхода равен нулю, соответствующий тогда Список выполняется и команда завершается. В противном случае еще список выполняется, если есть. Состояние выхода — это состояние выхода последней выполненной команды или ноль, если ни одно из условий не проверено как истинное.
  • пока список; делать список; сделанный а также до список; делать список; сделанныйпока Команда непрерывно выполняет делать список, пока последняя команда в списке возвращает статус выхода ноль. до Команда идентична пока команда, за исключением того, что тест отменяется; делать Список выполняется до тех пор, пока последняя команда в списке возвращает ненулевой статус выхода. Статус выхода пока а также до Команды — это статус выхода последней делать команда списка выполнена или ноль, если ни одна не была выполнена.
  • функция ] список имен; }: Это определяет функцию с именем name. Тело функции — это список команд между {и}. Этот список выполняется всякий раз, когда имя указывается в качестве имени простой команды. Состояние выхода функции — это состояние выхода последней команды, выполненной в теле.

    Комментарии

    В неинтерактивной оболочке или интерактивной оболочке, в которой interactive_comments вариант к shopt встроенный включен, слово начинается с # вызывает игнорирование этого слова и всех оставшихся символов в этой строке. Интерактивная оболочка без interactive_comments опция включена не позволяет комментарии. interactive_comments опция включена по умолчанию в интерактивных оболочках.  

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

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

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

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

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

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

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

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

    Особые параметры * а также @ имеют особое значение, когда в двойных кавычках.

    Слова формы $«строка» обрабатываются специально. Слово расширяется до строки, символы с обратной косой чертой заменяются в соответствии со стандартом ANSI C. Экранирующие последовательности с обратной косой чертой, если они есть, декодируются следующим образом:

    • \ а: оповещение (звонок)
    • \ б: Backspace
    • \ е: побег персонаж
    • \ е: подача формы
    • \ п: новая линия
    • : возврат каретки
    • \ т: горизонтальная вкладка
    • \ v: вертикальная вкладка
    • \\: обратная косая черта
    • : одиночная цитата
    • \nnn: восьмиразрядный символ, значение которого является восьмеричным значением nnn (от одной до трех цифр)
    • \ИксЧЧ: восьмибитный символ, значение которого является шестнадцатеричным значением ЧЧ (одна или две шестнадцатеричные цифры)
    • \ сx: контрольный символ x

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

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

    параметры

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

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

    Переменная может быть назначена оператором в форме: имя = [значение]

    Если значение не указано, переменной присваивается пустая строка. Все значения подвергаются расширению тильды, расширению параметров и переменных, подстановке команд, расширению арифметики и удалению кавычек. Если переменная имеет свой целое число Если атрибут установлен, то значение подвергается арифметическому расширению, даже если расширение $ ((…)) не используется. Разделение слов не выполняется, за исключением «$ @» как объяснено в Специальные параметры. Расширение пути не выполняется. Заявления о назначении могут также выступать в качестве аргументов объявлятьверстатьэкспорттолько для чтения, а также местный встроенные команды.  

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

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

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

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

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

    • *: Расширяется до позиционных параметров, начиная с единицы. Когда раскрытие происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенного первым символом IFS специальная переменная. Это, «$ *» эквивалентно «$ 1с$ 2сгде с — первый символ значения IFS переменная. Если IFS не установлен, параметры разделены пробелами. Если IFS имеет значение null, параметры объединяются без промежуточных разделителей.
    • @: Расширяется до позиционных параметров, начиная с единицы. Когда раскрытие происходит в двойных кавычках, каждый параметр раскрывается в отдельное слово. Это, «$ @» эквивалентно «$ 1«»$ 2«… когда нет позиционных параметров»$ @» а также $ @расширяться до нуля (они удалены).
    • #: Расширяется до количества позиционных параметров в десятичном формате.
    • ?: Расширяется до состояния самого последнего выполненного переднего конвейера.
    • : Расширяется до флагов текущей опции, как указано при вызове, установлен встроенная команда или те, которые установлены самой оболочкой, такие как  вариант.
    • $: Расширяется до идентификатора процесса оболочки. В подоболочке () она расширяется до идентификатора процесса текущей оболочки, а не подоболочки.
    • !: Расширяется до идентификатора процесса последней выполненной фоновой (асинхронной) команды.
    • : Расширяется до имени оболочки или сценария оболочки. Это устанавливается при инициализации оболочки. Если удар вызывается с файлом команд, $ 0 устанавливается на имя этого файла. Если удар начинается с  вариант, то $ 0 устанавливается на первый аргумент после строки, которая будет выполнена, если таковая имеется. В противном случае ему присваивается имя файла, используемое для вызова удар, как указано в аргументе ноль.
    • _: При запуске оболочки задайте абсолютное имя файла оболочки или выполняемого сценария оболочки, как передано в списке аргументов. Впоследствии расширяется до последнего аргумента предыдущей команды после расширения. Также установите полное имя файла каждой команды, выполненной и помещенной в среду, экспортируемую в эту команду. При проверке почты этот параметр содержит имя проверяемого почтового файла.

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

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

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

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

      • BASH_VERSINFO [0]: основной номер версии (релиз)
      • BASH_VERSINFO [1]: вспомогательный номер версии (версия)
      • BASH_VERSINFO [2]: уровень патча
      • BASH_VERSINFO [3]: версия сборки
      • BASH_VERSINFO [4]: статус релиза (например, бета1)
      • BASH_VERSINFO [5]: значение MACHTYPE

      BASH_VERSION: Разворачивается в строку, описывающую версию этого экземпляра удар.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      OPTARG: Значение последнего аргумента параметра, обработанного getopts встроенная команда.

      OPTIND: Индекс следующего аргумента, который будет обработан getopts встроенная команда.

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

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

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

      PWD: Текущий рабочий каталог, установленный компакт диск команда.

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

      ОТВЕТИТЬ: Установить строку ввода, читаемую читать встроенная команда, когда аргументы не указаны.

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

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

      SHLVL: Увеличивается на единицу каждый раз удар запущен

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

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

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

      CDPATH: Путь поиска для компакт диск команда. Это список каталогов, разделенных двоеточиями, в которых оболочка ищет каталоги назначения, указанные компакт диск команда. Пример значения «.: ~: / Usr».

      КОЛОННЫ: Используется Выбрать встроенная команда для определения ширины терминала при печати списков выбора. Автоматически устанавливается при получении SIGWINCH.

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

      FCEDIT: Редактор по умолчанию для Ь встроенная команда.

      FIGNORE: Список суффиксов, разделенных двоеточиями, которые следует игнорировать при выполнении завершения имени файла. Имя файла, суффикс которого соответствует одной из записей в FIGNORE исключен из списка совпадающих имен файлов. Пример значения «.o: ~».

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

      HISTCONTROL: Если установлено значение ignorespace, строки, начинающиеся с пространство Символ не занесен в список истории. Если установлено значение ignoredups, строки, соответствующие последней строке истории, не вводятся. Значение ignoreboth объединяет два варианта. Если не установлено или установлено любое другое значение, кроме указанных выше, все строки, считываемые анализатором, сохраняются в списке истории при условии значения HISTIGNORE. Функция этой переменной заменена HISTIGNORE. Вторая и последующие строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTCONTROL.

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

      HISTFILESIZE: Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, файл истории усекается, если необходимо, чтобы он содержал не более этого количества строк. Значение по умолчанию — 500. Файл истории также усекается до этого размера после записи при выходе из интерактивной оболочки.

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

      HISTSIZE: Количество команд, которые нужно запомнить в истории команд. Значение по умолчанию составляет 500.

      ГЛАВНАЯ: Домашний каталог текущего пользователя; аргумент по умолчанию для компакт диск встроенная команда. Значение этой переменной также используется при выполнении расширения тильды.

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

      IFS: Разделитель внутренних полей используется для разделения слов после раскрытия и разделения строк на слова с помощью читать встроенная команда. Значением по умолчанию является «».

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

      INPUTRC: Имя файла для Readline файл запуска, переопределяющий значение по умолчанию ~ / .inputrc.

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

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

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

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

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

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

      ЛИНИИ: Используется Выбрать встроенная команда для определения длины столбца для печати списков выбора. Автоматически устанавливается при получении SIGWINCH.

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

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

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

      MAILPATH = '/ var / mail / bfox? "У вас есть почта": ~ / shell-mail? "$ _ Имеет почту!"'

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

      Opterr: Если установлено значение 1, удар отображает сообщения об ошибках, сгенерированные getopts встроенная команда. Opterr устанавливается в 1 каждый раз, когда вызывается оболочка или выполняется сценарий оболочки.

      ДОРОЖКА: Путь поиска команд. Это разделенный двоеточиями список каталогов, в которых оболочка ищет команды. Путь по умолчанию зависит от системы и устанавливается администратором, который устанавливает удар. Обычное значение: «/ usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ».

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

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

      PS1: Значение этого параметра раскрывается и используется в качестве основной строки приглашения. Значением по умолчанию является «\ S- \ v \ $ ».

      PS2: Значение этого параметра расширяется как PS1 и используется в качестве вспомогательной строки приглашения. По умолчанию это «».

      PS3: Значение этого параметра используется в качестве подсказки для Выбрать команда.

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

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

      • %%: Буквальный %
      • % [p] [l] R: истекшее время в секундах
      • % [p] [l] U: количество процессорных секунд, проведенных в пользовательском режиме
      • % [p] [l] S: количество секунд работы процессора в системном режиме
      • : Процент загрузки процессора, рассчитывается как (% U +% S) /% R

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

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

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

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

      auto_resume: Эта переменная контролирует взаимодействие оболочки с пользователем и управление заданиями. Если эта переменная задана, простые команды, состоящие из одного слова, без перенаправлений считаются кандидатами на возобновление существующего остановленного задания. Не допускается двусмысленность. Если есть несколько заданий, начинающихся с набранной строки, выбирается задание, к которому последний раз обращались. В этом контексте имя остановленного задания — это командная строка, используемая для его запуска. Если установлено точное значение, предоставленная строка должна точно соответствовать имени остановленного задания; если установлено значение substring, предоставленная строка должна соответствовать подстроке имени остановленного задания. Значение подстроки обеспечивает функциональность, аналогичную%? идентификатор работы. Если установлено любое другое значение, предоставленная строка должна быть префиксом имени остановленного задания; это обеспечивает функциональность, аналогичную % идентификатор работы.

      histchars: Два или три символа, управляющие расширением и токенизацией истории. Первый символ — это символ расширения истории, символ, который обычно указывает на начало расширения истории.!». Второй символ — это символ быстрой замены, который используется в качестве сокращения для повторного ввода предыдущей введенной команды и замены одной строки другой в команде. По умолчанию^». Необязательный третий символ — это символ, который указывает на то, что оставшаяся часть строки является комментарием, как правило, в качестве первого символа слова.#». Символ комментария к истории заставляет пропустить подстановку истории для оставшихся слов в строке. Это не обязательно заставляет анализатор оболочки обрабатывать оставшуюся часть строки как комментарий.

      Массивы

      удар предоставляет одномерный массив переменных. Любая переменная может использоваться как массив; объявлять Встроенный явно объявит массив. Не существует максимального ограничения на размер массива и каких-либо требований, чтобы члены были проиндексированы или назначены непрерывно. Массивы индексируются с использованием целых чисел и начинаются с нуля.

      Массив создается автоматически, если любая переменная назначается с использованием синтаксиса name [subscript] = value. Подстрочный индекс обрабатывается как арифметическое выражение, которое должно иметь значение, большее или равное нулю. Чтобы явно объявить массив, используйте объявить -a имя. объявить -a имя [нижний индекс] также принимается; нижний индекс игнорируется. Атрибуты могут быть указаны для переменной массива, используя объявлять а также только для чтения внутренние команды. Каждый атрибут применяется ко всем членам массива.

      Массивы присваиваются с использованием составных присваиваний вида name =(значение1 … значение), где каждое значение имеет форму [subscript] = string. Требуется только строка. Если поставляются необязательные скобки и нижний индекс, этому индексу присваивается; в противном случае индекс назначенного элемента является последним индексом, назначенным оператором, плюс один. Индексирование начинается с нуля. Этот синтаксис также принят объявлять встроенный. Отдельные элементы массива могут быть назначены с использованием синтаксиса name [subscript] = value.

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

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

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

      расширение

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

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

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

      Только расширение фигурных скобок, разбиение слов и расширение имени пути могут изменить количество слов расширения; другие расширения расширяют одно слово в одно слово. Единственными исключениями к этому являются расширения «$ @» а также «$ {имя[@]}».

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

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

      Расширение скобок может быть вложенным. Результаты каждой расширенной строки не сортируются; порядок слева направо сохраняется. Например,{д, с, Ь}Он расширяется до «Ade Ace».

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

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

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

      mkdir / usr / local / src / bash / {старый, новый, dist, ошибки}

      или же

      chown root /usr/ndomucb/ndomex,edit‹,lib/ enjex?.?*,how_ex}}

      Расширение скобок вносит небольшую несовместимость с историческими версиями ш, который не обрабатывает открывающие или закрывающие скобки, особенно когда они появляются как часть слова, и сохраняет их в выводе. удар удаляет фигурные скобки из слов как следствие расширения фигурных скобок. Например, слово, введенное в ш поскольку файл {1,2} одинаково отображается в выходных данных. То же слово выводится как file1 file2 после расширения удар. Если строгая совместимость с ш желательно, начать удар с +В включить или отключить расширение скобки с помощью  вариант к установлен команда.  

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

      Если слово начинается с символа кавычки без кавычек (‘~‘), все символы, предшествующие первой косой черте без кавычек (или все символы, если косой черты не заключены в кавычки), считаются префиксом тильды. Если ни один из символов в префиксе тильды не заключен в кавычки, символы в префиксе тильды, следующие за тильдой, рассматриваются как возможное имя для входа. Если это имя входа является пустой строкой, тильда заменяется значением параметра оболочки ГЛАВНАЯ. Если ГЛАВНАЯ не установлен, вместо него подставляется домашний каталог пользователя, выполняющего оболочку. В противном случае префикс тильды заменяется домашним каталогом, связанным с указанным именем входа.

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

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

      Каждое присвоение переменной проверяется на наличие кавычек-префиксов без кавычек сразу после : или же знак равно. В этих случаях также выполняется расширение тильды. Следовательно, можно использовать имена файлов с тильдами в назначениях ДОРОЖКАMAILPATH, а также CDPATH, и оболочка назначает расширенное значение.  

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

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

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

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

      Если первый символ параметра является восклицательным знаком, вводится уровень косвенной косвенности. удар использует значение переменной, сформированной из остальной части параметра, в качестве имени переменной; эта переменная затем раскрывается, и это значение используется в остальной части замещения, а не в значении самого параметра. Это известно как косвенное расширение. Исключением является расширение $ {! Prefix *}, описанное ниже.

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

      • $ {параметр: -word}: использовать значения по умолчанию. Если параметр не установлен или ноль, расширение слова заменяется. В противном случае значение параметра подставляется.
      • $ {параметр: = слово}: назначить значения по умолчанию. Если параметр не установлен или равен нулю, расширение слова присваивается параметру. Значение параметра затем подставляется. Позиционные параметры и специальные параметры не могут быть назначены таким образом.
      • $ {параметр:? слово}: показать ошибку, если ноль или не установлен. Если параметр равен нулю или не задан, расширение слова (или сообщение на этот счет, если слово отсутствует) записывается со стандартной ошибкой, и оболочка, если она не является интерактивной, завершается. В противном случае значение параметра подставляется.
      • $ {параметр: + слово}: использовать альтернативное значение. Если параметр равен нулю или не задан, ничто не подставляется, в противном случае подставляется расширение слова.
      • $ {Параметр: смещение} а также $ {параметр: смещение: длина}: расширение подстроки. Расширяется до длины символов параметра, начиная с символа, указанного смещением. Если длина не указана, расширяется до подстроки параметра, начиная с символа, заданного смещением. Длина и смещение являются арифметическими выражениями. Длина должна оцениваться до числа, большего или равного нулю. Если смещение оценивается как число меньше нуля, значение используется как смещение от конца значения параметра. Если параметр @, результат — позиционные параметры длины, начинающиеся со смещения. Если параметр является именем массива, индексированным с помощью @ или *, результатом является длина элемента массива, начинающегося с $ {параметр [смещение]}. Индексирование подстроки начинается с нуля, если только не используются позиционные параметры, и в этом случае индексация начинается с 1.
      • $ {! prefix *}: расширяется до имен переменных, имена которых начинаются с префикса, разделенных первым символом IFS специальная переменная.
      • $ {# параметр}: длина в символах значения параметра подставляется. Если параметр * или же @, подставляемое значение — это количество позиционных параметров. Если параметр является именем массива, подписанным * или же @, подставляемое значение — это количество элементов в массиве.
      • $ {Параметр # слово} а также $ {параметр ## слово}: слово раскрывается для создания шаблона, как в раскрытии пути. Если шаблон соответствует началу значения параметра, то результатом расширения является расширенное значение параметра с самым коротким соответствующим шаблоном ( #‘case) или самый длинный соответствующий шаблон ( ##Дело) удалено. Если параметр @ или же *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, и расширение является результирующим списком. Если параметр является переменной массива, подписанной с @ или же *, операция удаления шаблона применяется к каждому члену массива по очереди, и расширение является результирующим списком.
      • $ {Параметр% слово} а также $ {параметр %% word}: слово раскрывается для создания шаблона, как в раскрытии пути. Если шаблон соответствует завершающей части расширенного значения параметра, то результатом расширения является расширенное значение параметра с самым коротким соответствующим шаблоном ( %‘case) или самый длинный соответствующий шаблон ( %% дело) удалено. Если параметр @ или же *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, и расширение является результирующим списком. Если параметр является переменной массива, подписанной с @ или же *, операция удаления шаблона применяется к каждому члену массива по очереди, и расширение является результирующим списком.
      • $ {Параметр / шаблон / строка} а также $ {параметр // шаблон / строка}: шаблон расширяется, чтобы создать шаблон так же, как в расширении пути. Параметр раскрывается, и самое длинное совпадение шаблона с его значением заменяется строкой. В первой форме заменяется только первый матч. Вторая форма вызывает замену всех совпадений шаблона на строку. Если шаблон начинается с #, оно должно совпадать в начале расширенного значения параметра. Если шаблон начинается с %, оно должно совпадать в конце расширенного значения параметра. Если строка равна нулю, совпадения шаблона удаляются и / следующий шаблон может быть опущен. Если параметр @ или же *, операция замещения применяется к каждому позиционному параметру по очереди, а расширение является результирующим списком. Если параметр является переменной массива, подписанной с @ или же *, операция замещения применяется к каждому члену массива по очереди, а расширение является результирующим списком.

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

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

        $ (команда) а также команда

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

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

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

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

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

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

        $ ((выражение))

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

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

        Процесс замены

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

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

        Расщепление слов

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

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

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

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

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

        После разделения слов, если только  опция была установлена, удар сканирует каждое слово для символов *?, а также [. Если появляется один из этих символов, слово считается шаблоном и заменяется отсортированным по алфавиту списком имен файлов, соответствующих шаблону. Если не найдено подходящих имен файлов и опция оболочки nullglob отключено, слово осталось без изменений. Если nullglob опция установлена ​​и совпадений не найдено, слово удалено. Если опция оболочки nocaseglob включено, сопоставление выполняется без учета буквенных символов. Когда шаблон используется для раскрытия пути, символ ».» в начале имени или сразу после косой черты должно совпадать явно, если не указан параметр оболочки dotglob установлено. При сопоставлении имени пути символ косой черты всегда должен совпадать явно. В других случаях ».» характер не рассматривается специально. Смотрите описание shopt под Команды Shell Builtin для описания nocaseglobnullglob, а также dotglob варианты оболочки.

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

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

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

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

        *: Соответствует любой строке, включая пустую строку

        ?: Соответствует любому отдельному символу

        […]: Соответствует любому из вложенных символов. Пара символов, разделенных дефисом, обозначает выражение диапазона; любой символ, который сортируется между этими двумя символами, включительно, с использованием последовательности сопоставления текущей локали и набора символов, сопоставляется. Если первый символ после [ это ! или ^ тогда любой символ, не заключенный в это, сопоставляется. Порядок сортировки символов в выражениях диапазона определяется текущей локалью и значением LC_COLLATE переменная оболочки, если установлена.  может быть сопоставлен включением его в качестве первого или последнего символа в наборе. ] может быть сопоставлен включением его в качестве первого символа в наборе. 

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

        alnum alpha ascii blank cntrl цифра граф нижний шрифт пункт пробел верхнее слово xdigit

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

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

        В [ а также ], синтаксис [.условное обозначение.] соответствует символу сопоставления символов

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

        • ?(модель-лист): Соответствует нулю или одному вхождению данных паттернов
        • * (модель-лист): Соответствует нулю или более вхождений данных паттернов
        • +(модель-лист): Соответствует одному или нескольким вхождениям данных шаблонов
        • @ (модель-лист): Точно соответствует одному из заданных шаблонов
        • !(модель-лист): Соответствует всему, кроме одного из заданных шаблонов

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

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

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

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

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

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

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

        Ls > Dirlist 2>1

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

        Ls 2>> DirList

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

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

        • / DEV / FD /fd: если fd является допустимым целым числом, дескриптор файла fd дублируется.
        • / DEV / STDIN: Дескриптор файла 0 дублируется.
        • / DEV / STDOUT: Дескриптор файла 1 дублируется.
        • / DEV / STDERR: Дескриптор файла 2 дублирован.
        • / DEV / TCP /хост / порт: если хост является действительным именем хоста или интернет-адресом, а порт является целочисленным номером порта или именем службы, удар пытается открыть TCP-соединение с соответствующим сокетом.
        • / DEV / UDP /хост / порт: если хост является действительным именем хоста или интернет-адресом, а порт является целочисленным номером порта или именем службы, удар пытается открыть UDP-соединение с соответствующим сокетом.

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

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

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

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

        [П]<слово

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

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

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

        [П]>слово

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

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

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

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

        [П]>>слово

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

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

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

        >слово

        а также

        >слово

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

        >слово 2>1

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

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

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

        <<[-] слово здесь-документ
        ограничитель

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

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

        Здесь Строки

        Для здесь-строк, вариант здесь-документов, формат:

        <<<слово

        Слово раскрывается и передается команде на стандартный ввод.  

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

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

        [П]<&слово

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

        Оператор

        [П]>слово

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

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

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

        [П]<&цифра

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

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

        [П]>цифра

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

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

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

        [П]слово

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

        Псевдонимы

        Псевдонимы позволяют заменить строку словом, если оно используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и удалены с помощью псевдоним а также unalias встроенные команды. Первое слово каждой команды, если оно не заключено в кавычки, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Имя псевдонима и текст замены могут содержать любые допустимые входные данные оболочки, включая метасимволы, перечисленные выше, за исключением того, что имя псевдонима может не содержать =. Первое слово замещающего текста проверяется на псевдонимы, но слово, идентичное расширяемому псевдониму, не раскрывается во второй раз. Это означает, что можно псевдоним Ls в ls -F, например, и удар не пытается рекурсивно расширить текст замены. Если последний символ значения псевдонима является пустым, то следующее слово команды, следующее за псевдонимом, также проверяется на расширение псевдонима.

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

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

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

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

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

        функции

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

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

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

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

        Функции могут быть рекурсивными. Количество рекурсивных вызовов не ограничено.  

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

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

        • id ++ id—: переменная после увеличения и после уменьшения
        • ++id —id: предварительное увеличение и предварительное уменьшение переменной
        • — +: унарный минус и плюс
        • ! ~: логическое и побитовое отрицание
        • **: возведение в степень
        • * /%: умножение, деление, остаток
        • + —: сложение, вычитание
        • <>: сдвиг влево и вправо по битам
        • знак равно : сравнение
        • ==! =: равенство и неравенство
        • : поразрядное И
        • ^: битовое исключающее ИЛИ
        • |: побитовый ИЛИ
        • : логическое И
        • ||: логическое ИЛИ
        • expr? expr: expr: условная оценка
        • = * = / =% = + = — = <>знак равно = ^ = | =: назначение
        • expr1, expr2: запятая

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

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

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

        Условные выражения

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

        • — file: True, если файл существует
        • -б file: True, если файл существует и является блочным специальным файлом
        • -с file: True, если файл существует и является символьным специальным файлом
        • -d file: True, если файл существует и является каталогом
        • -е file: True, если файл существует
        • -е file: True, если файл существует и является обычным файлом
        • -грамм file: True, если файл существует и является set-group-id
        • -час file: True, если файл существует и является символической ссылкой
        • -К file: True, если файл существует и его бит «sticky» установлен
        • -п file: True, если файл существует и является именованным каналом (FIFO)
        • -р file: True, если файл существует и доступен для чтения
        • -s file: True, если файл существует и имеет размер больше нуля
        • -T fd: True, если дескриптор файла fd открыт и ссылается на терминал
        • -U file: True, если файл существует и его бит set-user-id установлен
        • -вес file: True, если файл существует и доступен для записи
        • -Икс file: True, если файл существует и является исполняемым
        • -О file: True, если файл существует и принадлежит эффективному идентификатору пользователя
        • -грамм file: True, если файл существует и принадлежит эффективному идентификатору группы
        • -L file: True, если файл существует и является символической ссылкой
        • -S file: True, если файл существует и является сокетом
        • -N file: True, если файл существует и был изменен с момента последнего чтения
        • file1 —нт file2: True, если file1 новее (в соответствии с датой изменения), чем file2 или если file1 существует, а file2 нет
        • file1 —Ветхий Завет file2: True, если file1 старше file2 или если file2 существует, а file1 не существует
        • file1 -эф file2: True, если file1 и file2 относятся к одному и тому же устройству и номерам узлов
        • -о optname: True, если включена опция оболочки optname.
        • -Z string: True, если длина строки равна нулю
        • строка -N string: True, если длина строки не равна нулю
        • string1 == string2: True, если строки равны. знак равно может быть использован вместо == для строгого соответствия POSIX.
        • string1 !знак равно string2: True, если строки не равны.
        • string1 < string2: True, если строка1 сортируется перед строкой 2 лексикографически в текущей локали
        • string1 > string2: True, если строка1 сортируется после строки 2 лексикографически в текущей локали
        • arg1 OP арг2: OP один из -уравнение-Небраска-ле-GT, или же -GE. Эти арифметические бинарные операторы возвращают true, если arg1 равно, не равно, меньше, меньше или равно, больше или больше или равно arg2, соответственно. Arg1 и arg2 могут быть положительными или отрицательными целыми числами.

          Простое расширение команд

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

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

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

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

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

          Выполнение команды

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

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

          Если имя не является ни функцией оболочки, ни встроенным и не содержит косых черт, удар ищет каждый элемент ДОРОЖКА для каталога, содержащего исполняемый файл с этим именем. удар использует хеш-таблицу, чтобы запомнить полные имена исполняемых файлов. Полный поиск по каталогам в ДОРОЖКА выполняется только в том случае, если команда не найдена в хэш-таблице. Если поиск не выполнен, оболочка печатает сообщение об ошибке и возвращает состояние выхода 127.

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

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

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

          Среда выполнения команд

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

          • Открытые файлы, унаследованные оболочкой при вызове, измененные перенаправлениями, предоставленными Exec встроенная
          • Текущий рабочий каталог, установленный компакт дискPushd, или же POPD, или наследуется оболочкой при вызове
          • Маска режима создания файла, установленная Umask или унаследовано от родителя оболочки
          • Текущие ловушки, установленные ловушка
          • Параметры оболочки, которые устанавливаются путем назначения переменных или с помощью установлен или унаследовано от родителя оболочки в среде
          • Функции оболочки, определенные во время выполнения или унаследованные от родителя оболочки в среде
          • Опции включаются при вызове, либо по умолчанию, либо с аргументами командной строки, либо с помощью установлен
          • Опции включены shopt
          • Псевдонимы оболочки, определенные с псевдоним
          • Различные идентификаторы процессов, в том числе фоновые задания, значение $$, и значение $ PPID

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

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

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

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

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

          Ссылка на основную публикацию