Хотя это первое справедливое приближение, когда вы начинаете изучать основы использования оболочек, на уровне «вот как вы запускаете программу» и «вот как вы запускаете несколько программ одну за другой в одной строке» это не совсем так.
Новичку труднее понять, но более правильное объяснение состоит в том, что язык оболочки - это компьютерный язык . У него есть синтаксис . Этот синтаксис включает в себя различные лексические элементы, включая (среди прочего) переводы строк, операторы, слова и зарезервированные слова.
if
, then
, else
, И fi
все зарезервированные слова . Они имеют особое значение при разборе ввода, которое вы даете оболочке, в соответствии с ее грамматикой . Точно так же ;
это разделитель оператором- .
Таким образом, ввод на языке оболочки в целом представляет собой компьютерную программу, которая интерпретируется другой программой- интерпретатором. , оболочкой. Его отдельные грамматические части не являются программами. Язык оболочки - это способ указания (других) программ для запуска оболочки.
[
не является специальным лексическим элементом в грамматике оболочки, таким как оператор. Это обычное слово , которое называет одну такую программу с именем [
. Многие оболочки имеют встроенную версию этой программы, объединенную в код самой программы оболочки, но вы также можете найти внешнюю программу под этим именем, например, /bin/[
или /usr/bin/[
, которую могут вызывать другие программы, кроме оболочек. Точно так же ]
не является специальным лексическим элементом оболочки. Это обычное слово, которое становится аргументом для [
программы. [
Программа требует , чтобы его последний аргумент, когда он выполняется, то ]
, что он приступает к затем игнорировать.
Другая похожая программа, названная в вашем вопросе echo
. Опять же, большинство оболочек имеют встроенную версию этой программы. Но опять же, существует также внешняя версия программы, где-то, например, /bin/echo
или /usr/bin/echo
, для запуска программ, отличных от оболочек.
Третья программа, названная в вашем вопросе ls
. Оболочки, как правило, не имеют встроенных версий этой программы, и это внешняя программа, которую можно найти где-то, например, /bin/ls
или /usr/bin/ls
.
Об оболочке Bourne Again вы можете узнать больше об этом в разделе Основные функции оболочки документации по информации оболочки Bourne Again GNU. Естественно, другие оболочки имеют разные грамматики. Спецификация Single Unix описывает синтаксис, которому должны придерживаться все POSIX-совместимые оболочки (в их POSIX-совместимых режимах).
дальнейшее чтение
- " Грамматика Shell ". Язык командной оболочки . Базовые спецификации Выпуск 7. Открытая группа. IEEE 1003.1-2008. ISBN 1937218812.
test
, Утилиты . Базовые спецификации Выпуск 7. Открытая группа. IEEE 1003.1-2008. ISBN 1937218812.
- " Грамматика Shell ". Руководство по Z Shell . версия 5.3.1. 2017.