Il " esac
" termina un precedente " case
" per formare un " blocco di codice ".
In Algol68 vengono utilizzati, in genere la sequenza di caratteri invertiti della parola chiave introduttiva viene utilizzata per terminare il recinto, ad es. ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Li chiamerei "blocchi custoditi" come Edsger Dijkstra e il suo linguaggio di comando custodito .
od
presumibilmente non fu usato nella Bourne Shell a causa della preesistenza del comando "od" di Unix .
La storia:
L'idea di "Guarded Block" sembra provenire da ALGOL 68, ad esempio l'inglese:
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;
L' implementazione sovietica della LGU Algol68 ha fatto lo stesso: in inglese si legge la riverente dichiarazione del caso Algol68 case ~ in ~ out ~ esac
, in cirillico si legge выб ~ в ~ либо ~ быв
.
Poi nel 1975 i blocchi di codice di Algol68 furono presi in prestito da Edsger Dijkstra per il suo linguaggio di comando custodito . per esempio
if a ≥ b → max := a
| b ≥ a → max := b
fi
Presumibilmente Dijstra utilizzato "Blocchi custodito" per superare l' altro penzoloni ambiguità implementato in Algol60 e poi riprogettato nel linguaggio di programmazione C . (cfr . conflitto di riduzione-riduzione ) .
Infine - da Algol68 - " esac
" è arrivato alla shell Bourne del 1977 (dove hai scoperto esac
) per gentile concessione di Stephen R. Bourne che aveva sviluppato un compilatore Algol68 chiamato ALGOL 68C .
Notoriamente Stephen ha anche usato questi stessi blocchi protetti in un "file di intestazione C" chiamato macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
I notevoli geni del software Landon Curt Noll e Larry Bassel si imbatterono nel codice macro.h di Steve nel 1984 mentre lavoravano nel gruppo porting Genix di National Semiconductor e facevano fatica a comprenderne l'applicazione. E così Landon & Larry hanno quindi creato il Concorso internazionale per codice C offuscato ...
Dal 1984 ad oggi ci sono state diverse migliaia di altri linguaggi di programmazione "migliori" che non usano i Comandi custoditi di Dijkstra. E il loro uso da parte di Steven Bourne macro.h
è ora spesso citato nelle "Dissertazioni sullo sviluppo del software" degli studenti IT come prova del fatto che non dormivano durante le lezioni. :-)
esac
indica i punti esattamente dove dovrebbe - alla linea che lo definisce e mostra che è richiesto.