Підстановка команди - це можливість команди виконуватись так, що її вихідні дані повертаються в командний рядок аргументами для наступної команди. Функція підстановки вперше з’явилося в оболонці Борна разом з Version 7 Unix у 1979 році і з того часу залишилась однією з характеристик оболонок Unix і розповсюдилась в інших мовах програмування таких, як Perl, PHP, Ruby i Powershell для Windows. Також зустрічається в CMD.EXE в командіFOR
та( )
Синтаксис та семантика
Оболонки типово використовують підстановку команди, створюючи дочірний процес для виконання першої команди зі стандартного потоку виводу, що приєднаний до тої ж оболонки, що читає цей вивід, синтаксично аналізуючи його і розділяючи пробілом слова.
Наступний приклад на 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 системах, де пробіли тепер можуть використовуватись. В будь-якому з прикладів вище, якщо будь-яка з назв файлів, що збігається з байдужим символом *.с, містить пробіл. , то vi розіб’є її на два окремі аргументи і це не той результат, який очікується. вирішив цю проблемою подвійними гравісами,``
... ``
що розділяє на слова лише при розривах стрічки. Це приклад підстановки команди з використанням оператора ()
в PowerShell:
$MyVariable = (ls) echo $MyVariable
Підстановка виразу
Пов’язана з даною можливість, підстановки виразу, часто зустрічається в Common Lisp та Scheme в ABC, використовуючи вираз, взятий в гравіси всередині текстового виводу (рядкового літералу). Наприклад, ABC команда WRITE '2 + 2 = `2+2`'
виведе 2 + 2 = 4.
Див. також
Посилання
- IT news, careers, business technology, reviews. Computerworld (англ.). Архів оригіналу за 4 Березня 2016. Процитовано 14 січня 2022.
- Johnson, Chris (2009), 8, Pro Bash Programming: Scripting the Linux Shell, New York, NY: Springer-Verlag New York, Inc., с. 84, архів оригіналу за 14 Січня 2022, процитовано 19 грудня 2014,
File names containing spaces are an abomination, but they are so common nowadays that scripts must take their possibility (or should I say inevitability?) into account. ... The result of command substitution is subject to word splitting
- Hamilton C shell User guide: I/O redirection: Command substitution, Hamilton Laboratories, архів оригіналу за 19 грудня 2014, процитовано 19 грудня 2014
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Nemaye perevirenih versij ciyeyi storinki jmovirno yiyi she ne pereviryali na vidpovidnist pravilam proektu Pidstanovka komandi ce mozhlivist komandi vikonuvatis tak sho yiyi vihidni dani povertayutsya v komandnij ryadok argumentami dlya nastupnoyi komandi Funkciya pidstanovki vpershe z yavilosya v obolonci Borna 1 razom z Version 7 Unix u 1979 roci i z togo chasu zalishilas odniyeyu z harakteristik obolonok Unix i rozpovsyudilas v inshih movah programuvannya takih yak Perl PHP Ruby i Powershell dlya Windows Takozh zustrichayetsya v CMD EXE v komandiFORta Zmist 1 Sintaksis ta semantika 2 Pidstanovka virazu 3 Div takozh 4 PosilannyaSintaksis ta semantikared Obolonki tipovo vikoristovuyut pidstanovku komandi stvoryuyuchi dochirnij proces dlya vikonannya pershoyi komandi zi standartnogo potoku vivodu sho priyednanij do toyi zh obolonki sho chitaye cej vivid sintaksichno analizuyuchi jogo i rozdilyayuchi probilom slova Nastupnij priklad na C shell pokazuye mozhlivist poshuku vsih fajliv z rozshirennyam c yaki mistyat v sobi ryadok malloc realizovanu komandoyu a href wiki Fgrep class mw redirect title Fgrep fgrep a i yih redaguvannya vikoristovuyuchi redaktor vi Sintaksichna notaciya predstavlena gravisom ta rozdilyuvalnimi simvolami originalnij sintaksis yakij pidtrimuyetsya j inshimi Unix obolonkami bin csh vi fgrep l malloc c Yak sintaksis napisannya komandi tak i semantiku mehanizm roboti ne shvalyuvali Legkist v napisanni ne zabezpechuvala osnovnogo najvazhlivishogo faktoru dlya interaktivnogo komandnogo procesoru Sintaksis kritikuvali za nezruchnist vkladennya odniyeyi pidstanovki komandi vseredini inshoyi tomu sho i livij i pravij rozdilyuvalni simvoli buli odnakovimi KornShell ksh virishiv ce alternativnoyu notaciyeyu vzyavshi za priklad stil pidstanovki zminnih Sogodni bilshist Unix i ne tilki v tomu chisli Powershell vid Microsoft obolonok pidtrimuyut takij sintaksis bin bash vi fgrep l malloc c Semantiku ta rozbittya vivodu na slova probilami takozh kritikuvali Vona pracyuvala spravno v rannih versiyah Unix sistem de probili ne vikoristovuvalis v nazvah fajliv ale zovsim nekorektno na suchasnih Windows i Linux sistemah de probili teper mozhut vikoristovuvatis V bud yakomu z prikladiv vishe yaksho bud yaka z nazv fajliv sho zbigayetsya z bajduzhim simvolom s mistit probil 2 to vi rozib ye yiyi na dva okremi argumenti i ce ne toj rezultat yakij ochikuyetsya Hamilton C shell virishiv cyu problemoyu podvijnimi gravisami sho rozdilyaye na slova lishe pri rozrivah strichki 3 Ce priklad pidstanovki komandi z vikoristannyam operatora v PowerShell MyVariable ls echo MyVariablePidstanovka virazured Pov yazana z danoyu mozhlivist pidstanovki virazu chasto zustrichayetsya v Common Lisp ta Scheme v ABC vikoristovuyuchi viraz vzyatij v gravisi vseredini tekstovogo vivodu ryadkovogo literalu Napriklad ABC komanda WRITE 2 2 2 2 vivede 2 2 4 Div takozhred Procesne zamishennyaPosilannyared IT news careers business technology reviews Computerworld angl Arhiv originalu za 4 Bereznya 2016 Procitovano 14 sichnya 2022 Johnson Chris 2009 8 Pro Bash Programming Scripting the Linux Shell New York NY Springer Verlag New York Inc s 84 arhiv originalu za 14 Sichnya 2022 procitovano 19 grudnya 2014 File names containing spaces are an abomination but they are so common nowadays that scripts must take their possibility or should I say inevitability into account The result of command substitution is subject to word splitting Hamilton C shell User guide I O redirection Command substitution Hamilton Laboratories arhiv originalu za 19 grudnya 2014 procitovano 19 grudnya 2014 Otrimano z https uk wikipedia org wiki Pidstanovka komandi