O " esac
" termina um " case
" anterior para formar um " bloco de código ".
No Algol68, eles são usados, geralmente a sequência de caracteres invertida da palavra-chave de introdução é usada para terminar o gabinete, por exemplo, ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Eu os chamaria de "Blocos Guardados", em homenagem a Edsger Dijkstra e sua Linguagem de Comando Guardada .
od
presumivelmente não foi usado no Bourne Shell por causa da pré-existência do comando "od" do Unix .
A história:
A idéia do "Bloco Guardado" parece ter vindo do ALGOL 68, por exemplo, inglês:
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;
A implementação da LGU Algol68 da União Soviética fez o mesmo: em inglês, a declaração de caso reverente de Algol68 diz case ~ in ~ out ~ esac
, em cirílico, isto diz выб ~ в ~ либо ~ быв
.
Então, em 1975, os blocos de código de Algol68 foram emprestados por Edsger Dijkstra para sua Linguagem de Comando Guardada . por exemplo
if a ≥ b → max := a
| b ≥ a → max := b
fi
Presumivelmente Dijstra usado "vigiado Blocks" para superar a outra oscilação ambigüidade implementado em Algol60 e então re-engenharia na Linguagem de Programação C . (cf. turno-reduzir conflito ) .
Finalmente - do Algol68 - " esac
" chegou ao shell Bourne de 1977 (onde você descobriu esac
), cortesia de Stephen R. Bourne, que havia desenvolvido um compilador Algol68 antigo chamado ALGOL 68C .
Famosamente, Stephen também usou esses mesmos Blocos Guardados em um "arquivo de cabeçalho C" chamado macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Os notáveis gênios do software Landon Curt Noll e Larry Bassel encontraram o código macro.h de Steve em 1984 enquanto trabalhavam no grupo de portões Genix da National Semiconductor e lutavam para entender sua aplicação. Então Landon & Larry criou o Concurso Internacional de Código Ofuscado C ...
De 1984 até hoje, existem milhares de outras linguagens de programação "melhores" que não usam os Comandos Guardados de Dijkstra. E o uso deles por Steven Bourne macro.h
agora é frequentemente citado nas "Dissertações de Desenvolvimento de Software" dos estudantes de TI como prova de que não dormiam em palestras. :-)
esac
pontos exatamente onde deveria - para a linha que o define e ilustra que é necessário.