Während dies eine faire erste Annäherung ist, wenn man anfängt, die Grundlagen der Verwendung von Shells zu erlernen, wird auf der Ebene von "hier wird ein Programm ausgeführt" und "hier werden mehrere Programme nacheinander in einer einzigen Zeile ausgeführt" ist es eigentlich nicht wahr.
Für Anfänger ist es schwieriger zu verstehen, aber die richtige Erklärung ist, dass die Shell-Sprache eine Computersprache ist . Es hat eine Syntax . Diese Syntax umfasst verschiedene lexikalische Elemente, darunter (unter anderem) Zeilenumbrüche, Operatoren, Wörter und reservierte Wörter.
if
, then
, else
, Und fi
sind alle reservierten Wörter . Sie haben besondere Bedeutungen beim Parsen der Eingabe, die man einer Shell gemäß ihrer Grammatik gibt . In ähnlicher Weise ;
ist ein Separator Operator .
Die Eingabe in der Shell-Sprache wird somit als Ganzes als Computerprogramm verstanden, das von einem anderen Programm, einem Interpreter , der Shell interpretiert wird. Die einzelnen grammatikalischen Teile sind keine Programme. Mit der Shell-Sprache können Sie (andere) Programme angeben, die von der Shell ausgeführt werden sollen.
[
ist kein spezielles lexikalisches Element in der Shell-Grammatik wie ein Operator. Es ist ein gewöhnliches Wort , das ein solches Programm benennt [
. Viele Shells haben eine integrierte Version dieses Programms, die im Code des Shell-Programms selbst kombiniert ist. Sie können jedoch auch ein externes Programm mit diesem Namen finden, z. B. /bin/[
oder /usr/bin/[
, das von anderen Programmen als Shells aufgerufen werden kann. Ebenso ]
ist es auch kein spezielles Shell-Lexikonelement. Es ist ein gewöhnliches Wort, das zum Argument für das [
Programm wird. Das [
Programm verlangt, dass sein letztes Argument, wenn es ausgeführt wird, sein muss ]
, das es dann ignoriert.
Ein anderes ähnliches Programm, das in Ihrer Frage genannt wird, ist echo
. Wieder haben die meisten Shells eine eingebaute Version dieses Programms. Es gibt aber auch eine externe Version des Programms, die irgendwo wie /bin/echo
oder /usr/bin/echo
für andere Programme als Shells aufgerufen werden kann.
Ein drittes in Ihrer Frage genanntes Programm ist ls
. Shells haben im Allgemeinen keine integrierten Versionen dieses Programms, und es ist ein externes Programm, das sich irgendwo wie /bin/ls
oder befindet /usr/bin/ls
.
Weitere Informationen zur Bourne Again-Shell finden Sie in den grundlegenden Shell-Funktionen der GNU Bourne Again-Shell-Info-Dokumentation. Andere Muscheln haben natürlich andere Grammatiken. Die Single Unix Specification beschreibt eine Syntax, an die sich alle POSIX-konformen Shells (in ihren POSIX-konformen Modi) halten sollen.
Weitere Lektüre
- " Shell Grammatik ". Shell-Befehlssprache . Basisspezifikationen Problem 7. Die offene Gruppe. IEEE 1003.1-2008. ISBN 1937218812.
test
. Dienstprogramme . Basisspezifikationen Problem 7. Die offene Gruppe. IEEE 1003.1-2008. ISBN 1937218812.
- " Shell Grammatik ". Das Z-Shell-Handbuch . Version 5.3.1. 2017.