НАЗВАНИЕ
sh - командный интерпретатор (оболочка)
СИНТАКСИС
ш -/ + ACefnuvxIimqsVEbc -о longname -words цель …
ОПИСАНИЕ
Sh - стандартный командный интерпретатор для системы. Текущая версияш находится в процессе изменения, чтобы соответствоватьPOSIX 1003.2 и 1003.2a для оболочки. Эта версия имеет множество функций, которые в какой-то степени похожи на оболочку Korn, но это не клоун оболочки Korn (см. Ksh (1)). Только функции, обозначенныеPOSIX плюс несколько расширений Berkeley, включены в эту оболочку. Мы ожидаемPOSIX соответствие к времени 4.4 BSD освобождается. Эта справочная страница не предназначена для обучения или полной спецификации оболочки.
обзор
Оболочка - это команда, которая считывает строки из файла или терминала, интерпретирует их и обычно выполняет другие команды. Это программа, которая запускается, когда пользователь входит в систему (хотя пользователь может выбрать другую оболочку с помощью команды chsh (1)). Оболочка реализует язык с конструкциями управления потоком, средство макросов, которое предоставляет множество функций в дополнение к хранилищу данных, а также встроенные возможности редактирования истории и редактирования строк. Он включает в себя множество функций для интерактивного использования и имеет то преимущество, что язык интерпретации является общим как для интерактивного, так и для неинтерактивного использования (сценарии оболочки). То есть команды могут быть введены непосредственно в рабочую оболочку или могут быть помещены в файл, и файл может быть запущен непосредственно оболочкой.
мольба
Если аргументы отсутствуют, и если стандартный ввод оболочки связан с терминалом (или если -яфлаг установлен), а -с опции нет, оболочка считается интерактивной оболочкой. Интерактивная оболочка обычно запрашивает перед каждой командой и обрабатывает ошибки программирования и команд по-разному (как описано ниже). При первом запуске оболочка проверяет аргумент 0, и если он начинается с тире `- ', оболочка также считается оболочкой входа. Обычно это делается автоматически системой при первом входе пользователя в систему. Командная оболочка сначала считывает команды из файлов / etc / profile и .profile, если они существуют. Если переменная окруженияENV задается при вводе в оболочку или задается в .profile оболочки входа, оболочка next считывает команды из файла, указанного вENVПоэтому пользователь должен размещать команды, которые должны выполняться только во время входа в файл .profile, и команды, которые выполняются для каждой оболочки внутриENV файл. Чтобы установитьENV переменной в некоторый файл, поместите следующую строку в свой .profile вашего домашнего каталога
ENV = $ HOME / .shinit; экспорт ENV
подставляя `` .shinit '' любое имя файла, которое вы хотите. ПосколькуENV файл считывается для каждого вызова оболочки, включая скрипты оболочки и неинтерактивные оболочки, следующая парадигма полезна для ограничения команд вENV файл для интерактивных вызовов. Поместите команды в «case» и «esac» ниже (эти команды описаны ниже):
случай $ - in * i *)
# команд для интерактивного использования
…
ESAC
Если аргументы командной строки, кроме опций, были указаны, то оболочка рассматривает первый аргумент как имя файла, из которого следует читать команды (сценарий оболочки), а остальные аргументы задаются как позиционные параметры оболочки ($ 1 , $ 2 и т. Д.). В противном случае оболочка считывает команды со своего стандартного ввода.
Обработка списка аргументов
Все опции с одной буквой имеют соответствующее имя, которое может использоваться в качестве аргумента для -о вариант. Набор -о имя указывается рядом с однобуквенным вариантом в описании ниже. Указание тире `` - '' включает эту опцию, а при использовании плюса `` + '' отключает эту опцию. Следующие параметры могут быть установлены из командной строки или с помощью встроенного набора (1) (описано ниже).
-a allexport
Экспортировать все назначенные переменные. (НЕОБХОДИМЫЕ для 4.4alpha)
-с
Прочитайте команды из командной строки. Никакие команды не будут считаны со стандартного ввода.
-С NoClobber
Не перезаписывайте существующие файлы с помощью ``> '' (UNIMPLEMENTED for 4.4alpha)
-e errexit
Если это не интерактивно, немедленно выйдите, если какая-либо непроверенная команда завершится с ошибкой. Статус выхода команды считается явно протестированным, если команда используется для управленияесли elifwhile или жедо тех пор или если команда является левым операндом оператора `` && '' или `` || ''.
-f noglob
Отключить расширение имени пути.
-n поехес
Если это не интерактивно, прочитайте команды, но не выполните их. Это полезно для проверки синтаксиса сценариев оболочки.
-u nounset
Напишите стандартную ошибку сообщения при попытке развернуть переменную, которая не установлена, и если оболочка не является интерактивной, немедленно выйдите из нее. (НЕОБХОДИМЫЕ для 4.4alpha)
-v подробный
Оболочка записывает свой вход в стандартную ошибку по мере ее чтения. Полезно для отладки.
-Икс xtrace
Напишите каждую команду в стандартную ошибку (перед символом «+» перед ее выполнением. Полезно для отладки.
-q quietprofile
Если -v или же -Икс параметры были установлены, не применяйте их при чтении файлов инициализации, это файл / etc / profile .profile и файл, указанный вENV переменная среды.
-Я IGNOREEOF
Игнорировать EOF от ввода при интерактивном режиме.
-я интерактивный
Заставить оболочку вести себя интерактивно.
-m монитор
Включите управление заданиями (автоматически устанавливается при интерактивном режиме).
-s STDIN
Чтение команд со стандартного ввода (устанавливается автоматически, если нет аргументов файла). Эта опция не действует при установке после того, как оболочка уже запущена (т. Е. С помощью set (1)).
-V VI
Включите встроенный редактор командной строки vi (1) (отключает -Е если он был установлен).
-E Emacs
Включите встроенный редактор командной строки emacs (1) (отключает -В если он был установлен).
-b поставить в известность
Включить асинхронное уведомление о завершении фонового задания. (НЕОБХОДИМЫЕ для 4.4alpha)
Лексическая структура
Оболочка читает ввод в терминах строк из файла и разбивает его на слова в пробелах (пробелы и табуляции) и на определенные последовательности символов, которые являются особыми для оболочки, называемой «операторы». Существует два типа операторов: операторы управления и операторы перенаправления (их значение обсуждается ниже). Ниже приведен список операторов:
«Операторы управления:»
& && ( ) ; ;; | || «Оператор перенаправления:" < > >| << >> <& >& <<- <>
Quoting используется для удаления специального значения определенных символов или слов в оболочке, таких как операторы, пробелы или ключевые слова. Существует три типа цитирования: совпадающие одинарные кавычки, двойные кавычки и обратная косая черта. Обратная косая черта сохраняет буквальное значение следующего символа, за исключением Aq newline. Обратная косая черта, предшествующая Aq newline, рассматривается как продолжение линии. Одиночные символы в одинарных кавычках сохраняют буквальное значение всех символов (кроме одинарных кавычек, что делает невозможным размещение одиночных кавычек в одной кавычки). Закрывающие символы в двойных кавычках сохраняют буквальное значение всех символов, кроме доллара ($) backquote (`) и обратную косую черту (). Обратная косая черта внутри двойных кавычек исторически странна и служит для цитирования только следующих символов: $ ` В противном случае он остается буквальным. Зарезервированные слова - это слова, которые имеют особое значение для оболочки и распознаются в начале строки и после оператора управления. Ниже приведены зарезервированные слова: ! Taelif Ta fi Ta в то время как случай Та иначе Тадля Ta тогда Ta {Ta} делать Тасделал Та до Та, если Та esac Их смысл обсуждается позже. Псевдоним - это имя и соответствующее значение, заданное с помощью команды alias (1) builtin. Всякий раз, когда может появляться зарезервированное слово (см. Выше), и после проверки зарезервированных слов оболочка проверяет слово, чтобы увидеть, соответствует ли он псевдониму. Если это так, он заменяет его во входном потоке своим значением. Например, если есть псевдоним под названием `` lf '' со значением `` ls -F '', то вход: lf foobar станет ls -F foobar Псевдонимы обеспечивают удобный способ для наивных пользователей создавать короткие команды для команд, не изучая, как создавать функции с аргументами. Они также могут использоваться для создания лексически неясного кода. Это использование не рекомендуется. Оболочка интерпретирует слова, которые он читает, в соответствии с языком, спецификация которого выходит за рамки этой справочной страницы (см. BNF вPOSIX 1003.2). По сути, строка читается, и если первое слово строки (или после оператора управления) не является зарезервированным словом, то оболочка распознает простую команду. В противном случае может быть признана сложная команда или какая-либо другая специальная конструкция. Если простая команда была распознана, оболочка выполняет следующие действия: Ведущие слова формы `` name = value '' удаляются и назначаются среде простой команды. Операторы перенаправления и их аргументы (как описано ниже) удаляются и сохраняются для обработки. Остальные слова расширены, как описано в разделе «Расширения», а первое оставшееся слово считается именем команды и командой. Остальные слова считаются аргументами команды. Если имя команды не было приведено, то присваивания переменных `` name = value '', распознанные в элементе 1, влияют на текущую оболочку. Перенаправления выполняются, как описано в следующем разделе. Перенаправления Перераспределения используются для изменения, когда команда считывает свой ввод или отправляет свой вывод. В общем случае перенаправления открывают, закрывают или дублируют существующую ссылку на файл. Общий формат, используемый для перенаправления: n redir-op файл где REDIR-оп является одним из операторов перенаправления, упомянутых ранее. Ниже приведен список возможных перенаправлений. Bq n - необязательное число, как в `3 '(не` Bq 3', которое относится к файловому дескриптору. n> файл Переназначить стандартный вывод (или n) в файл. n> | файл То же, но переопределить -С вариант. n >> файл Добавить стандартный вывод (или n) в файл. n <файл Переназначить стандартный ввод (или n) из файла. n1 <& n2 Дублировать стандартный ввод (или n1) из дескриптора файла n2. n <& - Закрыть стандартный ввод (или n). n1> & n2 Дублируйте стандартный вывод (или n1) из n2. n> & - Закройте стандартный вывод (или n). n <> файл Откройте файл для чтения и записи на стандартном входе (или n). Следующее перенаправление часто называют «здесь-документом», n << разделитель здесь-док-текст … ограничитель Все тексты на последующих строках до разделителя сохраняются и доступны для команды на стандартном входе или дескриптора файла n, если он указан.Если разделитель, указанный в начальной строке, цитируется, то текст здесь-документа обрабатывается буквально, в противном случае текст подвергается расширению параметров, замене команд и арифметическому расширению (как описано в разделе «Расширения») 'Если оператор `` << -' 'вместо `` <<' ', то ведущие вкладки в тексте here-doc удаляются. Существует три типа команд: функции оболочки, встроенные команды и обычные программы - и команда выполняется поиск (по имени) в этом порядке. Каждый из них выполняется по-другому. Когда выполняется функция оболочки, все позиционные параметры оболочки (кроме $ 0, которые остаются неизменными) устанавливаются в аргументы функции оболочки. Переменные, которые явно помещаются в среду команды (путем размещения присвоений им перед именем функции), становятся локальными для этой функции и устанавливаются в значения. Затем выполняется команда, заданная в определении функции. Позиционные параметры восстанавливаются до их первоначальных значений, когда команда завершается. Все это происходит в текущей оболочке. Встроенные оболочки встроены в оболочку, не создавая новый процесс. В противном случае, если имя команды не соответствует функции или встроенному, команда выполняется как обычная программа в файловой системе (как описано в следующем разделе). Когда выполняется обычная программа, оболочка запускает программу, передавая в нее аргументы и среду. Если программа не является нормальным исполняемым файлом (т. Е. Если она не начинается с «магического числа»,ASCII представление «#!», поэтому execve (2) возвращает Er ENOEXEC, тогда) оболочка интерпретирует программу в подоболочке. В этом случае дочерняя оболочка будет повторно инициализироваться, так что эффект будет таким, как если бы новая оболочка была вызвана для обработки сценария ad-hoc-оболочки, за исключением того, что расположение хэшированных команд, расположенных в родительской оболочке, будет запоминаться ребенок. Обратите внимание, что предыдущие версии этого документа и сам исходный код вводят в заблуждение и спорадически ссылаются на сценарий оболочки без магического числа в качестве «процедуры оболочки». Когда вы находите команду, оболочка сначала смотрит, есть ли у нее функция оболочки с этим именем. Затем он ищет встроенную команду под этим именем. Если встроенная команда не найдена, происходит одна из двух вещей: Имена команд, содержащие косая черта, просто выполняются без каких-либо поисков. Оболочка ищет каждую запись вДОРОЖКА в свою очередь, для команды. ЗначениеДОРОЖКАпеременная должна быть серией записей, разделенных двоеточиями. Каждая запись состоит из имени каталога. Текущий каталог может указываться неявно пустым именем каталога или явно одним периодом. Статус выхода команды Каждая команда имеет статус выхода, который может влиять на поведение других команд оболочки. Парадигма заключается в том, что команда выходит с нулевым значением для нормального или успешного, и ненулевое значение для отказа, ошибки или ложной индикации. Страница руководства для каждой команды должна указывать различные коды выхода и то, что они означают. Кроме того, встроенные команды возвращают коды выхода, также как и выполняемая функция оболочки. Сложные команды - это комбинации простых команд с управляющими операторами или зарезервированными словами, вместе создавая более сложную команду. В общем случае команда является одной из следующих: Если не указано иное, статус выхода команды - это команда последней простой команды, выполняемой командой. Конвейер представляет собой последовательность из одной или нескольких команд, разделенных управляющим оператором |. Стандартный вывод всех, кроме последней команды, связан со стандартным вводом следующей команды. Стандартный вывод последней команды наследуется от оболочки, как обычно. Формат для конвейера: ! command1 | command2 … Стандартный вывод команды 1 подключен к стандартному вводу команды2. Стандартный ввод, стандартный вывод или обе команды считаются назначенными конвейером до любого перенаправления, указанного операторами перенаправления, которые являются частью команды. Если конвейер не находится в фоновом режиме (обсуждается ниже), оболочка ждет завершения всех команд. Если зарезервированное слово! не предшествует конвейеру, статус выхода - это статус выхода последней команды, указанной в конвейере. В противном случае статус выхода будет логическим NOT статуса выхода последней команды. То есть, если последняя команда возвращает ноль, статус выхода равен 1; если последняя команда возвращает больше нуля, статус выхода равен нулю. Поскольку назначение переназначения стандартного ввода или стандартного вывода или оба варианта имеют место перед перенаправлением, его можно изменить путем перенаправления. Например: $ command1 2> & 1 | command2 посылает как стандартный вывод, так и стандартную ошибку команды1 на стандартный ввод команды2. A; или же Обратите внимание, что в отличие от некоторых других оболочек каждый процесс в конвейере является дочерним элементом вызывающей оболочки (если только она не встроена в оболочку, и в этом случае она выполняется в текущей оболочке, но любой эффект, который она оказывает на среду, стирается). Если команда завершена оператором управления ampersand (&), оболочка выполняет асинхронную команду, то есть оболочка не ждет завершения команды перед выполнением следующей команды. Формат для запуска команды в фоновом режиме: command1 & command2 & … Если оболочка не является интерактивной, стандартный ввод асинхронной команды устанавливается в / dev / null Список представляет собой последовательность из нуля или более команд, разделенных символами новой строки, точки с запятой или амперсандами, и необязательно завершается одним из этих трех символов. Команды в списке выполняются в том порядке, в котором они записаны. Если за командой следует амперсанд, оболочка запускает команду и сразу же переходит к следующей команде; в противном случае он ждет завершения команды перед переходом к следующему. `` && '' и `` || '' являются операторами списка AND-OR. `` && '' выполняет первую команду, а затем выполняет вторую команду, если статус выхода первой команды равен нулю. `` || '' аналогичен, но выполняет вторую команду, если статус выхода первой команды отличен от нуля. `` && '' и `` || '' имеют одинаковый приоритет. Синтаксис команды if если список затем перечислить список elif затем список … else list фи Синтаксис команды while в списке сделать список сделанный Два списка выполняются повторно, а статус выхода первого списка равен нулю. Команда до тех пор, пока команда не будет похожа, но имеет слово до тех пор, пока это не произойдет, что заставляет ее повторять до тех пор, пока статус выхода первого списка не будет равен нулю. Синтаксис команды for для переменной в слове … сделать список сделанный Слова разворачиваются, а затем список выполняется повторно с переменной, заданной каждому слову поочередно. do и done могут быть заменены на `` {'' и ``} '' Синтаксис команды break и continue break num продолжить num Брейк завершает num inmost для циклов while или while. Продолжение продолжается со следующей итерацией самого внутреннего цикла. Они реализованы как встроенные команды. Синтаксис команды case ключевое слово в шаблон); … ESAC Шаблон может фактически быть одним или несколькими шаблонами (см. Шаблоны паттерна, описанные ниже), разделенные символами `` ''. Команды можно сгруппировать, написав либо (список) или же {list; Первый из них выполняет команды в подоболочке. Встроенные команды, сгруппированные в (список), не будут влиять на текущую оболочку. Вторая форма не развивает другую оболочку, поэтому она немного эффективнее. Группировка команд вместе таким образом позволяет перенаправить их вывод, как если бы они были одной программой: {printf hello; printf world n ";}> приветствие функции Синтаксис определения функции команда name () Определение функции - исполняемый оператор; при выполнении он устанавливает функцию с именем name и возвращает статус выхода из нуля. Обычно команда представляет собой список, заключенный между `` {'' и ``} '' Переменные могут быть объявлены локальными для функции с помощью локальной команды. Это должно выглядеть как первый оператор функции, а синтаксис - локальный переменная | - … Локальное реализовано как встроенная команда. Когда переменная создается локально, она наследует начальное значение и экспортированные флаги и только для чтения из переменной с тем же именем в окружении, если она есть. В противном случае переменная изначально отключается. Оболочка использует динамическое масштабирование, так что если вы сделаете переменную x local функцией f, которая затем вызывает функцию g, ссылки на переменную x, сделанные внутри g, будут ссылаться на переменную x, объявленную внутри f, а не на глобальную переменную с именем x , Единственным специальным параметром, который может быть локальным, является `` - '' Создание `` - '' локальных параметров любой оболочки, которые изменяются с помощью команды set внутри функции, которая будет восстановлена до их исходных значений при возврате функции. Синтаксис команды return return exitstatus Он завершает текущую выполняемую функцию. Возврат реализован как встроенная команда. Оболочка поддерживает набор параметров. Параметр, обозначаемый именем, называется переменной. При запуске оболочка превращает все переменные среды в переменные оболочки. Новые переменные можно задать с помощью формы имя = значение Переменные, установленные пользователем, должны иметь имя, состоящее исключительно из алфавитов, цифр и подчеркиваний - первое из которых не должно быть числовым. Параметр также может обозначаться числом или специальным символом, как описано ниже. Позиционный параметр - это параметр, обозначаемый числом (n> 0). Оболочка сначала устанавливает эти значения в значения аргументов командной строки, которые следуют за именем сценария оболочки. Встроенный набор (1) также может использоваться для установки или перезагрузки. Специальный параметр - это параметр, обозначаемый одним из следующих специальных символов. Значение параметра указывается рядом с его символом. * Расширяется до позиционных параметров, начиная с одного. Когда расширение происходит в строке с двумя кавычками, оно расширяется до одного поля со значением каждого параметра, разделенным первым символомIFS переменной или @ Расширяется до позиционных параметров, начиная с одного.Когда расширение происходит в двойных кавычках, каждый позиционный параметр расширяется как отдельный аргумент. Если нет позиционных параметров, расширение @ генерирует нулевые аргументы, даже если @ двойным кавычками. Например, это означает, что если $ 1 является `` abc '', а $ 2 является `` def ghi '', то Qq $ @ расширяется до двух аргументов: abc def ghi # Расширяется до числа позиционных параметров. ? Расширяется до статуса выхода самого последнего конвейера. - (Hyphen.) Расширяется до текущих флажков опций (однобуквенные имена опций, объединенные в строку), как указано при вызове, командой set builtin или неявно оболочкой. $ Расширяется до идентификатора процесса вызываемой оболочки. У подоболочки сохраняется то же значение $, что и его родитель. ! Расширяется до идентификатора процесса последней команды фона, выполняемой из текущей оболочки. Идентификатор процесса для конвейера - это идентификатор последней команды в конвейере. 0 (ноль.) Расширяется до имени оболочки или сценария оболочки. Расширения Word В этом разделе описываются различные расширения, выполняемые над словами. Не все расширения выполняются на каждом слове, как объясняется ниже. Расширения Tilde, расширения параметров, подстановки команд, арифметические расширения и абзацы котировок, которые происходят в одном слове, расширяются до одного поля. Это только разделение поля или расширение пути, которое может создавать несколько полей из одного слова. Единственным исключением из этого правила является расширение специального параметра @ в двойных кавычках, как описано выше. Порядок расширения слова: Расширение Тильды, Расширение параметров, Замена команд, Арифметическое расширение (все это происходит одновременно). Разделение полей выполняется в полях, генерируемых шагом (1), если толькоIFS переменная имеет значение null. Расширение пути (если не установлено -е действует). Удаление цитаты. Символ $ используется для введения параметров, замены команд или арифметической оценки. Слово, начинающееся с символа неупорядоченной тильды (~), подвергается расширению тильды. Все символы до косой черты (/) или конца слова рассматриваются как имя пользователя и заменяются домашним каталогом пользователя. Если имя пользователя отсутствует (как в ~ / foobar), тильда заменяется значением ГЛАВНАЯ variable (домашний каталог текущего пользователя). Формат для расширения параметров выглядит следующим образом: $ {Выражение} где выражение состоит из всех символов до тех пор, пока соответствующие символы ``} '' Any ``} '' не будут экранированы обратным слэшем или внутри строки с кавычками, а символы во встроенных арифметических расширениях, подстановках команд и расширениях переменных не будут рассмотрены при определении соответствие ``} '' Простейшей формой расширения параметра является: $ {Параметр} Значение, если таковое имеется, заменяется. Имя параметра или символ могут быть заключены в фигурные скобки, которые являются необязательными, за исключением позиционных параметров с более чем одной цифрой, или когда за параметром следует символ, который может быть интерпретирован как часть имени. Если в двойных кавычках происходит расширение параметра: Расширение имени пути не выполняется по результатам расширения. Разбиение поля не выполняется по результатам разложения, за исключением @. Кроме того, расширение параметра может быть изменено с использованием одного из следующих форматов. $ {Параметр: -слово} Используйте значения по умолчанию. Если параметр не задан или нулевым, слово замены заменяется; в противном случае значение параметра заменяется. $ {Параметр: = слово} Назначить значения по умолчанию. Если параметр не задан или null, расширение слова присваивается параметру. Во всех случаях конечное значение параметра заменяется. Таким образом можно назначить только переменные, а не позиционные параметры или специальные параметры. $ {Параметр: слово} Укажите ошибку, если Null или Unset. Если параметр не установлен или равен нулю, расширение слова (или сообщение, указывающее, что оно не задано, если слово опущено) записывается в стандартную ошибку, и оболочка выходит с ненулевым статусом выхода. В противном случае значение параметра заменяется. Интерактивная оболочка не должна выходить. $ {Параметр: + слово} Используйте альтернативное значение. Если параметр не задан или null, нуль заменяется; в противном случае расширение слова заменяется. В приведенных ранее расширениях параметров использование двоеточия в формате приводит к тесту параметра, который не задан или равен нулю; отсутствие двоеточия приводит к тестированию параметра, который только отменен. $ {# Параметр} Длина строки. Длина в символах значения параметра. Следующие четыре варианта расширения параметров обеспечивают обработку подстроки. В каждом случае для оценки шаблонов используется обозначение соответствия шаблону (см. Шаблоны оболочки), а не обозначение регулярных выражений. Если параметр равен * или @, результат расширения не указан. Включение полной строки расширения параметров в двойных кавычках не приводит к цитированию следующих четырех разновидностей символов шаблонов, тогда как цитирование символов в фигурных скобках имеет этот эффект. $ {Параметр% слово} Удалите малый шаблон суффикса. Слово расширяется для создания шаблона. Затем расширение параметра приводит к параметру, причем наименьшая часть суффикса совпадает с удаленным шаблоном. $ {Параметр %% слово} Удалите самый большой шаблон суффикса.Слово расширяется для создания шаблона. Затем расширение параметра приводит к параметру, причем наибольшая часть суффикса совпадает с удаленным шаблоном. $ {Параметр # слово} Удалите шаблон минимального префикса. Слово расширяется для создания шаблона. Затем расширение параметра приводит к параметру с наименьшей частью префикса, сопоставленной с удаленным шаблоном. $ {Параметр ## слово} Удалите самый большой шаблон префикса. Слово расширяется для создания шаблона. Затем расширение параметра приводит к параметру, причем наибольшая часть префикса совпадает с удаленным шаблоном. Замена команды Подстановка команды позволяет заменять вывод команды вместо имени команды. Замена команды происходит, когда команда заключена в следующем порядке: $ (Команда) или Po `` backquoted '' версия Pc: `command` Оболочка расширяет подстановку команд, выполняя команду в среде подсетей и заменяя подстановку команд стандартным выходом команды, удаляя последовательности одного или нескольких Арифметическое расширение предоставляет механизм для оценки арифметического выражения и подстановки его значения. Формат арифметического расширения выглядит следующим образом: $ ((Выражение)) Выражение обрабатывается так, как если бы оно было в двойных кавычках, за исключением того, что двойная кавычка внутри выражения не обрабатывалась специально. Оболочка расширяет все токены в выражении для расширения параметров, замены команд и удаления цитат. Затем оболочка рассматривает это как арифметическое выражение и заменяет значение выражения. После расширения параметров, подстановки команд и арифметического расширения оболочка сканирует результаты разложений и замещений, которые не встречались в двойных кавычках для разбиения поля и нескольких полей. Оболочка рассматривает каждый символIFS в качестве разделителя и использовать разделители для разделения результатов расширения параметров и подстановки команд в поля. Если только -е установлен флаг, генерация имени файла выполняется после завершения разделения слов. Каждое слово рассматривается как серия шаблонов, разделенных косой чертой. Процесс расширения заменяет слово именами всех существующих файлов, имена которых могут быть сформированы путем замены каждого шаблона на строку, которая соответствует указанному шаблону. Есть два ограничения на это: во-первых, шаблон не может соответствовать строке, содержащей косую черту, а во-вторых, шаблон не может соответствовать строке, начинающейся с периода, если первый символ шаблона не является периодом. В следующем разделе описываются шаблоны, используемые как для расширения Pathname, так и для команды case (1). Шаблон состоит из нормальных символов, которые соответствуют самим себе и метасимволам. Мета-символы - ``! '' `` * '' ``? '' И `` '' Эти символы теряют свои особые значения, если они цитируются. Когда выполняется команда или замена переменных, а знак доллара или обратные кавычки не дублируются, значение переменной или вывод команды сканируется для этих символов, и они превращаются в метасимволы. Звездочка (`` * '') соответствует любой строке символов. Вопросительный знак соответствует любому одиночному символу. Левая скобка (`` '') вводит класс символов. Конец класса символа обозначается символом (`` ''), если отсутствует символ `` '', тогда `` '' соответствует символу `` '', а не вводит класс символов. Класс символов соответствует любому из символов между квадратными скобками. Диапазон знаков может быть указан с помощью знака минус. Класс символа может быть дополнен, сделав восклицательный знак первым символом класса символов. Чтобы включить символ `` '' в класс символов, сделайте его первым символом (после ``! '', Если есть). Чтобы включить знак минус, сделайте его первым или последним символом, указанным В этом разделе перечислены встроенные команды, которые встроены, потому что им необходимо выполнить некоторую операцию, которая не может быть выполнена отдельным процессом. В дополнение к этим, есть несколько других команд, которые могут быть встроены для повышения эффективности (например, echo 1). : Нулевая команда, которая возвращает значение вывода (true). , файл Команды в указанном файле считываются и выполняются оболочкой. псевдоним название = строка … Если имя = строка , оболочка определяет псевдоним название со значением строка Если просто название указывается, значение псевдонима название печатается. Без аргументовпсевдоним builtin выводит имена и значения всех определенных псевдонимов (см.unalias) bg работа … Продолжайте задание заданий (или текущее задание, если задания не заданы) в фоновом режиме. команда команда arg … Выполните указанную встроенную команду. (Это полезно, если у вас есть функция оболочки с тем же именем, что и встроенная команда.) CD каталог Переключиться на указанный каталог (по умолчанию$ HOME) Если запись дляCDPATH появляется в средеCD команда или переменная оболочкиCDPATH и имя каталога не начинается с косой черты, тогда каталоги, перечисленные вCDPATH будет выполняться поиск по указанному каталогу. ФорматCDPATH такая же, как уДОРОЖКА В интерактивной оболочкеCD команда выведет имя каталога, на который он фактически переключился, если он отличается от имени, которое дал пользователь. Они могут быть разными либо потому, чтоCDPATH<
квотирование
бэкслэш
Одиночные цитаты
Двойные кавычки
Зарезервированные слова
Псевдонимы
команды
Простые команды
Поиск и выполнение
Поиск пути
Комплексные команды
Трубопроводы
Фоновые команды -
Списки - в общем говоря
Операторы короткого замыкания
Конструкции управления потоком - если, в то время как для случая
Группирование команд вместе
Переменные и параметры
Позиционные параметры
Специальные параметры
Расширение Tilde (заменяя домашний каталог пользователя)
Расширение параметров
Арифметическое расширение
Разделение белого пространства (разделение поля)
Расширение имени пути (создание имени файла)
Шаблоны оболочек
Встроенные команды