" esac
" Завершает более раннее " case
", чтобы сформировать " кодовый блок ".
В Algol68 они используются, как правило, для завершения вложения используется обратная последовательность символов вводящего ключевого слова, например ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Я бы назвал их «Охраняемые блоки» в честь Эдсгера Дейкстры и его « Охраняемого командного языка» .
od
по-видимому, не использовался в Bourne Shell из-за существования в Unix команды «od» .
История:
Идея "Охраняемого блока" пришла из Алгола 68, например, английского:
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;
Советская реализация LGU Algol68 сделала то же самое: на английском языке благоговейная формулировка Algol68 гласит case ~ in ~ out ~ esac
: на кириллице это звучит так выб ~ в ~ либо ~ быв
.
Затем в 1975 году кодовые блоки Algol68 были заимствованы Эдсгером Дейкстрой для его защищенного командного языка . например
if a ≥ b → max := a
| b ≥ a → max := b
fi
Предположительно, Диджстра использовал «Охраняемые блоки», чтобы преодолеть неоднозначность Dangling else, реализованную в Algol60 и затем переработанную на языке программирования Си . (ср. сдвиг-уменьшение конфликта. )
Наконец - из Algol68 - « esac
» сделал его в оболочку Bourne 1977 года (где вы обнаружили esac
) благодаря Стивену Борну, который разработал ранний компилятор Algol68 под названием ALGOL 68C .
Известно, что Стивен также использовал эти самые защищенные блоки в «заголовочном файле C», который называется macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Известные гении программного обеспечения Лэндон Курт Нолл и Ларри Бассель наткнулись на код macro.h Стива в 1984 году, когда работали в группе переноса Genix National Semiconductor, и пытались понять, как это можно сделать. И вот тогда Landon & Larry создали Международный конкурс кодов с запутанным кодом C ...
С 1984 года по сегодняшний день существует несколько тысяч других «лучших» языков программирования, которые не используют охраняемые команды Дейкстры. И использование их Стивеном Борном в macro.h
настоящее время часто цитируется в «диссертациях по разработке программного обеспечения» магистрантов ИТ как доказательство того, что они не спали на лекциях. :-)
esac
указывает, где именно это должно быть - на строку, которая ее определяет и иллюстрирует, что это необходимо.