Jump to content

Замена команды

В вычислительной технике подстановка команд — это средство, позволяющее запустить команду и вставить ее выходные данные обратно в командную строку в качестве аргументов другой команды. Подстановка команд впервые появилась в оболочке Bourne , [1] представлен в версии 7 Unix в 1979 году и остается характерной чертой всех более поздних оболочек Unix . С тех пор эта функция была принята в других языках программирования и , включая Perl , PHP , Ruby от Microsoft и Powershell под Windows . Он также появляется в Microsoft CMD.EXE в FOR команда и ( ) команда.

Синтаксис и семантика

[ редактировать ]

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

В этом примере оболочки C показано, как можно найти все файлы C, содержащие строку malloc с использованием fgrep а затем отредактируйте все найденные с помощью vi редактор. Синтаксические обозначения, показанные здесь, ` ...  `, использующий обратные кавычки в качестве разделителей , является оригинальным стилем и поддерживается всеми распространенными оболочками Unix.

#!/bin/csh
vi `fgrep -l malloc *.c`

Возражения были высказаны как против синтаксиса , как он типизирован, так и против семантики , как он работает.

Хотя этот синтаксис легко набирать, что является важным фактором для интерактивного командного процессора, его критиковали за то, что его неудобно вкладывать, помещая одну замену команды в другую, поскольку левый и правый разделители одинаковы. [2] КорнШелл ) (кш [3] решил это с альтернативным обозначением, $( ...  ), заимствованное из стиля обозначений, используемого для замены переменных . Сегодня большинство оболочек UNIX поддерживают этот синтаксис. от Microsoft PowerShell также использует эту нотацию с той же семантикой.

#!/bin/bash
vi $(fgrep -l malloc *.c)

Семантика, разбивающая вывод на слова через пробелы, также подверглась критике. Он хорошо работал в ранних системах Unix , где имена файлов никогда не содержали пробелов, но совершенно не работает в современных системах Windows и Linux , где имена файлов, безусловно, могут содержать пробелы. [4] В любом из этих предыдущих примеров, если какое-либо из имен файлов, совпадающих с *.c подстановочный знак содержит пробел, это имя файла будет разбито на два отдельных аргумента. vi, явно не то, что было задумано. Оболочка Hamilton C решила эту проблему с помощью двойной обратной кавычки: `` ...  ``, который разбивается на слова только в разрывах строк. [5]

Это пример подстановки команд используя () оператор в PowerShell :

$MyVariable = (ls)
echo $MyVariable

Замена выражения

[ редактировать ]

Связанная возможность, подстановка выражений, имеется в языках Common Lisp и Scheme , вызываемая с помощью оператора запятой в выражении, помеченном оператором обратной кавычки (или «квазикавычки»), а также в ABC с помощью выражения, заключенного между обратные кавычки внутри текстового дисплея ( строковый литерал ). Например, команда ABC WRITE '2 + 2 = `2+2`' производит вывод 2 + 2 = 4.

См. также

[ редактировать ]
  1. ^ Дада, Ховард. «AZ языков программирования: оболочка Bourne, или sh. Углубленное интервью со Стивом Борном, создателем оболочки Bourne, или sh». Архивировано 17 марта 2010 г. в Wayback Machine , Computerworld , 5 марта 2009 г.
  2. ^ «Unix Power Tools: 45.31 Замена вложенных команд» . Архивировано из оригинала 12 мая 2023 г. Проверено 17 марта 2010 г.
  3. ^ Розенблатт, Билл; Арнольд Роббинс (2002). Изучение Korn Shell (2-е изд.). О'Рейли Медиа, Инк. с. 127. ИСБН  978-0-596-00195-7 . Архивировано из оригинала 22 мая 2024 г. Проверено 20 июля 2010 г. Синтаксис подстановки команд: $(Unix command) Команда внутри круглых скобок запускается, и все, что команда записывает в стандартный вывод (и в стандартную ошибку), возвращается как значение выражения.
  4. ^ Джонсон, Крис (2009), «8», Программирование Pro Bash: создание сценариев для оболочки Linux , Нью-Йорк, Нью-Йорк: Springer-Verlag New York, Inc., стр. 84, ISBN  9781430219989 , заархивировано из оригинала 22 мая 2024 г. , получено 19 декабря 2014 г. Имена файлов, содержащие пробелы, — это мерзость, но в наши дни они настолько распространены, что сценарии должны учитывать их возможность (или лучше сказать неизбежность?). ... Результат подстановки команд подлежит разбиению слов
  5. ^ Руководство пользователя оболочки Hamilton C: Перенаправление ввода-вывода: замена команд , Hamilton Laboratories, заархивировано из оригинала 19 декабря 2014 г. , получено 19 декабря 2014 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0f047aa5b04a568eac3ba9da194aa62d__1716336660
URL1:https://arc.ask3.ru/arc/aa/0f/2d/0f047aa5b04a568eac3ba9da194aa62d.html
Заголовок, (Title) документа по адресу, URL1:
Command substitution - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)