" esac
" case
은 " code-block " 을 형성하기 위해 이전 " "을 종료합니다 .
Algol68에서는 일반적으로 도입 키워드의 반전 문자 순서가 엔클로저를 종료하는 데 사용됩니다 (예 : ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Edsger Dijkstra 와 그의 Guarded Command Language의 이름을 따서 "Guarded Blocks"라고 부릅니다 .
od
아마도 유닉스 "od"명령 이 이미 존재했기 때문에 Bourne Shell에서 사용되지 않았을 것 입니다.
역사 :
"Guarded Block"아이디어는 ALGOL 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;
소비에트의 Algol68 LGU 구현 도 동일하게 수행되었습니다. 영어에서 Algol68의 경건한 사례 case ~ in ~ out ~ esac
는 다음과 같습니다 выб ~ в ~ либо ~ быв
.
그리고 1975 년 Algol68의 코드 블록에 의해 차용 Edsger 데이 크 스트라 자신을 위해 지키고 명령 언어 . 예 :
if a ≥ b → max := a
| b ≥ a → max := b
fi
아마도 Dijstra는 "Guarded Blocks"를 사용 하여 Algol60 에서 구현 된 Dangling else 모호성 을 극복 한 다음 C 프로그래밍 언어 로 다시 엔지니어링했습니다 . (cf. 교대 감소 갈등 )
마지막으로 Algol68에서 " esac
"는 ALGOL 68C 라는 초기 Algol68 컴파일러를 개발 한 Stephen R. Bourne 의 1977 Bourne 쉘 (당신이 발견 한 곳 esac
)에 들어갔다 .
유명한 Stephen도 이와 같은 Guarded Blocks를 macro.h 라는 "C 헤더 파일"에 사용 했습니다.
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
주목할만한 소프트웨어 천재 인 Landon Curt Noll 과 Larry Bassel 은 1984 년 Steve의 macro.h 코드를 우연히 발견 한 후 내셔널 세미 컨덕터의 Genix 포팅 그룹에서 일하면서 애플리케이션 이해에 어려움을 겪었습니다. 그래서 Landon & Larry는 International Obfuscated C Code Contest 를 만들었습니다 .
1984 년부터 현재까지 Dijkstra의 Guarded Commands를 사용하지 않는 수천 개의 "더 나은"프로그래밍 언어가 있습니다. 그리고 스티븐 본 (Steven Bourne)의 사용 macro.h
은 이제 IT 학부생들의 "소프트웨어 개발 논문 (Software Development Dissertations)"에서 종종 강의에서 잠들지 않았다는 증거로 인용됩니다. :-)
esac
정확히 어디에 있어야 하는지를 나타내는 인덱스 엔트리 – 정의하고 필요한 것을 나타내는 선.