Подстановка команд позволяет заменить вывод команды вместо самого имени команды. Подстановка команды происходит, когда команда заключена следующим образом:
$(<i>command</i>)
или (версия в кавычках):
`<i>command</i>`
Оболочка должна расширить подстановку команд, выполнив command
в среде subshell (см. Среда выполнения оболочки ) и
замена подстановки команды (текст команда плюс
"$ ()" или обратные кавычки) со стандартным выводом
удаление последовательности из одного или нескольких <newline>
символов в
конец замены. Внедрено <newline>
символов до конца
из выхода не должны быть удалены; тем не менее, они могут рассматриваться как
разделители полей и исключаются при разделении полей, в зависимости от
значение IFS и цитирование, которое действует. Если вывод содержит
любые нулевые байты, поведение не определено.
В стиле замены команд в кавычках <backslash>
должен
сохранить его буквальное значение, за исключением случаев, когда следуют: '$
', '`
' или
<backslash>
. Поиск соответствующей обратной цитаты должен быть удовлетворен
первой не цитируемой обратной цитатой; во время этого поиска, если
неэкранированная обратная кавычка встречается в комментарии оболочки,
здесь-документ, встроенная подстановка команд в $ ( command )
форма или строка в кавычках, появляются неопределенные результаты. Одинарные кавычки или
строка в двойных кавычках, которая начинается, но не заканчивается внутри "`...`
"
последовательность дает неопределенные результаты.
С помощью формы $ ( command ) все символы после открытия
круглые скобки с соответствующими закрывающими скобками составляют
Команда . Любой допустимый сценарий оболочки может использоваться для команды , кроме
скрипт, состоящий исключительно из перенаправлений, который производит неопределенные
Результаты.
Результаты подстановки команд не обрабатываются для дальнейшего
расширение тильды, расширение параметров, подстановка команд или
арифметическое расширение. Если замена команды происходит внутри
двойные кавычки, разделение полей и расширение пути не должны быть
по результатам подстановки.
Подстановка команд может быть вложенной. Чтобы указать вложение в
версия в кавычках, приложение должно предшествовать внутренним обратным кавычкам
с <backslash>
символами; например:
\`<i>command</i>\`
Синтаксис языка команд оболочки имеет неоднозначность для расширений, начинающихся с "$((
",
который может вводить арифметическое расширение или подстановку команд, которая начинается с подоболочки.
Арифметическое расширение имеет приоритет; то есть оболочка должна сначала определить
может ли он анализировать расширение как арифметическое расширение
и должен только анализировать расширение как замену команды
если он определяет, что не может анализировать расширение как арифметическое расширение.
Оболочке не нужно оценивать вложенные расширения при выполнении этого определения.
Если он встречает конец ввода, еще не определив
что он не может анализировать расширение как арифметическое расширение,
оболочка должна рассматривать расширение как неполное арифметическое расширение и сообщать о синтаксической ошибке.
Соответствующее приложение должно гарантировать, что оно разделяет "$(
" и "(
" на два токена
(то есть разделите их пробелами) в подстановке команд, которая начинается с подоболочки.
Например, подстановка команды, содержащая одну подоболочку, может быть записана как:
$( (<i>command</i>) )