Топ питань
Часова шкала
Чат
Перспективи

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

З Вікіпедії, вільної енциклопедії

Remove ads

Підстановка команди - це можливість команди виконуватись так, що її вихідні дані повертаються в командний рядок аргументами для наступної команди. Функція підстановки вперше з’явилося в оболонці Борна[1] разом з Version 7 Unix у 1979 році і з того часу залишилась однією з характеристик оболонок Unix і розповсюдилась в інших мовах програмування таких, як Perl, PHP, Ruby i Powershell для Windows. Також зустрічається в CMD.EXE в командіFORта( )

Remove ads

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

Узагальнити
Перспектива

Оболонки типово використовують підстановку команди, створюючи дочірний процес для виконання першої команди зі стандартного потоку виводу, що приєднаний до тої ж оболонки, що читає цей вивід, синтаксично аналізуючи його і розділяючи пробілом слова.

Наступний приклад на C shell показує можливість пошуку всіх файлів з розширенням .c, які містять в собі рядок malloc , реалізовану командою fgrep, і їх редагування, використовуючи редактор vi. Синтаксична нотація ` ... ` представлена гравісом та розділювальними символами - оригінальний синтаксис, який підтримується й іншими Unix оболонками.

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

Як синтаксис (написання команди), так і семантику (механізм роботи) не схвалювали. Легкість в написанні не забезпечувала основного найважливішого фактору для інтерактивного командного процесору. Синтаксис критикували за незручність вкладення однієї підстановки команди всередині іншої, тому що і лівий, і правий розділювальні символи були однаковими.  KornShell (ksh) вирішив це альтернативною нотацією, $( ... ) взявши за приклад стиль підстановки змінних. Сьогодні більшість Unix (і не тільки, в тому числі Powershell від Microsoft ) оболонок підтримують такий синтаксис.

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

Семантику та розбиття виводу на слова пробілами також критикували. Вона працювала справно в ранніх версіях Unix систем, де пробіли не використовувались в назвах файлів, але зовсім некоректно на сучасних Windows i Linux системах, де пробіли тепер можуть використовуватись. В будь-якому з прикладів вище, якщо будь-яка з назв файлів, що збігається з байдужим символом *.с, містить пробіл.[2] , то vi розіб’є її на два окремі аргументи і це не той результат, який очікується.  Hamilton C shell вирішив цю проблемою подвійними гравісами,`` ... `` що розділяє на слова лише при розривах стрічки.[3] Це приклад підстановки команди з використанням оператора () в PowerShell:

$MyVariable = (ls)
echo $MyVariable
Remove ads

Підстановка виразу

Пов’язана з даною можливість, підстановки виразу, часто зустрічається в Common Lisp та Scheme в ABC, використовуючи вираз, взятий в гравіси всередині текстового виводу (рядкового літералу). Наприклад, ABC команда WRITE '2 + 2 = `2+2`' виведе 2 + 2 = 4.

Див. також

Посилання

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads