Spec-Zone.ru › Bash

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

​

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

$(command)

или (устаревшая форма)

`command`.

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

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

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

${c command; }

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

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

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

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

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

Например, эта конструкция раскрывается в ‘12345’ и оставляет переменную оболочки X неизменной в текущем окружении выполнения:


${ local X=12345 ; echo $X; }

(если не объявить X локальной переменной, её значение в текущем окружении изменится, как при обычном выполнении функции оболочки), тогда как эта конструкция не требует вывода для раскрытия в ‘12345’:

${| REPLY=12345; }

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

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

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

Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API