Das " esac
" beendet ein früheres " case
", um einen " Codeblock " zu bilden.
In Algol68 werden sie verwendet, im Allgemeinen wird die umgekehrte Zeichenfolge des einleitenden Schlüsselworts zum Beenden des Gehäuses verwendet, z ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Ich würde sie nach Edsger Dijkstra und seiner Guarded Command Language "Guarded Blocks" nennen .
od
Wurde in der Bourne-Shell vermutlich nicht verwendet, da der Unix- Befehl "od" bereits vorhanden war .
Die Geschichte:
Die Idee "Guarded Block" scheint von ALGOL 68 zu stammen, zB Englisch:
proc days in month = (int year, month)int:
case month in
31,
if year mod 4=0 ∧ year mod 100≠0 ∨ year mod 400=0 then 29 else 28 fi,
31, 30, 31, 30, 31, 31, 30, 31, 30, 31
esac;
Die Algol68-LGU-Implementierung des Sowjets hat das Gleiche getan: In Englisch lautet die ehrfurchtsvolle Erklärung von Algol68 case ~ in ~ out ~ esac
, in Kyrillisch lautet sie выб ~ в ~ либо ~ быв
.
1975 wurden die Code-Blöcke von Algol68 von Edsger Dijkstra für seine Guarded Command Language ausgeliehen . z.B
if a ≥ b → max := a
| b ≥ a → max := b
fi
Vermutlich verwendete Dijstra "Guarded Blocks", um die in Algol60 implementierte und dann in der Programmiersprache C überarbeitete Dangling else- Ambiguität zu überwinden . (vgl. Schichtreduzierungskonflikt. )
Schließlich - von Algol68 - " esac
" schaffte es 1977 mit freundlicher Genehmigung von Stephen R. Bourne , der einen frühen Algol68-Compiler namens ALGOL 68C entwickelt hatte, in die Bourne-Shell (wo Sie es entdeckten esac
) .
Bekanntermaßen verwendete Stephen diese Guarded Blocks auch in einer "C-Header-Datei" namens " macro.h"
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Die bemerkenswerten Software-Genies Landon Curt Noll und Larry Bassel stießen 1984 bei der Genix-Portierungsgruppe von National Semiconductor auf Steves macro.h-Code und hatten Mühe, dessen Anwendung zu verstehen. Und so gründete Landon & Larry den International Obfuscated C Code Contest ...
Von 1984 bis heute gab es mehrere tausend andere "bessere" Programmiersprachen, die die geschützten Befehle von Dijkstra nicht verwenden. Und Steven Bournes Einsatz in diesen macro.h
Studiengängen wird inzwischen häufig in den "Software Development Dissertations" von IT-Studenten als Beweis dafür angeführt, dass sie nicht in Vorlesungen geschlafen haben. :-)
esac
Punkte genau dort, wo er sein sollte - auf die Linie, die ihn definiert und veranschaulicht, dass er erforderlich ist.