Die Shell-Syntax basiert auf einem Präfix. Es enthält Klauseln, die durch spezielle Schlüsselwörter eingeführt werden. Bestimmte Klauseln müssen zusammenpassen.
Eine whileSchleife besteht aus einem oder mehreren Testbefehlen:
test ; test ; test ; ...
und durch einen oder mehrere Körperbefehle:
body ; body ; body ; ...
Etwas muss der Shell mitteilen, dass eine while-Schleife beginnt. Das ist der Zweck des whileWortes:
while test ; test ; test ; ...
Aber dann sind die Dinge nicht eindeutig. Welcher Befehl ist der Beginn des Körpers? Etwas muss darauf hinweisen, und das macht das doPräfix:
do body ; body ; body ; ...
und schließlich muss etwas darauf hindeuten, dass der letzte Körper gesehen wurde; ein spezielles Schlüsselwort donemacht das.
Diese Shell-Schlüsselwörter erfordern keine Semikolon-Trennung, auch nicht in derselben Zeile. Wenn Sie beispielsweise mehrere verschachtelte Schleifen schließen, können Sie nur haben done done done ....
Das Semikolon steht vielmehr zwischen, ... test ; body ... wenn sie sich in derselben Zeile befinden. Das Semikolon wird als Terminator verstanden: Es gehört zum test. Wenn ein doSchlüsselwort dazwischen eingefügt wird, muss es daher zwischen dem Semikolon und stehenbody . Wenn es sich auf der anderen Seite des Semikolons befindet, wird es fälschlicherweise in die testBefehlssyntax eingebettet und nicht zwischen den Befehlen platziert.
Die Shell-Syntax wurde ursprünglich von Stephen Bourne entworfen und ist von Algol inspiriert . Borowski liebte Algol so sehr, dass er viele C-Makros im Shell-Quellcode verwendete, um C wie Algol aussehen zu lassen. Sie können die Shell-Quellen von 1979 ab Version 7 Unix durchsuchen . Die Makros sind in mac.hund sie werden überall verwendet. Beispielsweise werden ifAussagen als IF... ELSE... ELIF... wiedergegeben FI.