Топ питань
Часова шкала
Чат
Перспективи
Підстановка команди
З Вікіпедії, вільної енциклопедії
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.
Див. також
Посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads