Le " esac
" termine un " case
" antérieur pour former un " bloc de code ".
Dans Algol68, ils sont utilisés, généralement la séquence de caractères inversée du mot-clé d'introduction est utilisée pour terminer l'enceinte, par exemple: ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Je les appellerais "blocs gardés" après Edsger Dijkstra et son langage de commande gardé .
od
probablement pas été utilisé dans Bourne Shell à cause de la pré-existence de la commande Unix "od" .
L'histoire:
L’idée "Guarded Block" semble provenir d’ ALGOL 68, par exemple en anglais:
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;
La mise en œuvre de la LGU Algol68 du Soviet a fait de même: en anglais, la déclaration de cas respectueuse d’Algol68 est lue case ~ in ~ out ~ esac
, celle en cyrillique выб ~ в ~ либо ~ быв
.
Puis, en 1975, Edsger Dijkstra a emprunté les blocs de code d'Algol68 pour son Guarded Command Language . par exemple
if a ≥ b → max := a
| b ≥ a → max := b
fi
On peut supposer que Dijstra utilisé « blocs » Surveillé pour surmonter la Dangling autre ambiguïté mis en œuvre dans Algol60 puis réorganisées dans le C Langage de programmation . (cf. shift-réduire le conflit. )
Enfin - d’Algol68 - " esac
" a été intégré dans le shell Bourne de 1977 (où vous l’avez découvert esac
) grâce à Stephen R. Bourne qui avait mis au point un ancien compilateur Algol68 appelé ALGOL 68C .
Stephen a aussi utilisé ces mêmes blocs protégés dans un "fichier d'en-tête C" appelé macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Les génies logiciels réputés Landon Curt Noll et Larry Bassel sont tombés par hasard sur le code macro.h de Steve en 1984 alors qu’ils travaillaient pour le groupe de portage Genix de National Semiconductor et avaient du mal à comprendre son application. Landon & Larry ont alors créé le concours international de code C obscurci ...
De 1984 à nos jours, plusieurs milliers d' autres "meilleurs" langages de programmation n'utilisant pas les commandes gardées de Dijkstra. Et leur utilisation par Steven Bourne macro.h
est à présent souvent citée dans les "Dissertations sur le développement logiciel" des étudiants en informatique comme la preuve qu'ils n'étaient pas endormis dans des cours magistraux. :-)
esac
points exactement où elle devrait - à la ligne qui la définit et illustre que c'est nécessaire.