Bash 사례 설명 끝에 나타나는 "esac"의 여러 예를 찾았지만 그 사용에 대한 명확한 문서는 찾지 못했습니다. 매뉴얼 페이지에서는 이를 사용하며 심지어 단어에 대한 색인(https://www.gnu.org/software/bash/manual/bashref.html#index-esac), 그러나 그 목적을 정의하지는 않습니다. 이것이 사례 설명을 끝내는 바람직한 방법입니까, 모범 사례입니까, 아니면 순전히 기술적입니까?
답변1
fi
for if
및 done
for와 for
마찬가지로 esac
명령문을 끝내는 데 적합한 방법입니다 case
.
esac
철자법 이 거꾸로 case
인 것처럼 거꾸로 철자합니다 . 블록을 끝내는 토큰이 왜 아닌지 모르겠습니다 .fi
if
for
rof
답변2
이 esac
키워드는 실제로 명령문을 끝내는 데 필요한 구분 기호이며 Unix/Linux(이 계열 제외)에서 사용되는 대부분의 셸에 있습니다 case
.bash
csh
원래의본 쉘창조자:스티브 번전에 일했던 사람알고리즘 68. 이 언어는 청크를 분리하기 위해 역 단어 기술을 발명했습니다.
case/esac
if/fi
do/od
후자는 더 이상 존재하지 않지만 do/od
Bourne do/done
및 모든 파생 쉘에서 Unix 명령으로 처음 bash
부터 존재했습니다(od
오케타르디너프).
기능 블록 은 or 지시문 do/done
에 의해 도입됩니다 . 종료할 필요가 없으면 충분 합니다 . 이것이 가정과 레이블이 필요하지 않은 이유 입니다 . for
while
until
for
while
until
done
rof
elihw
답변3
" esac
" 더 일찍 종료하여 " case
"을(를) 구성합니다.코드 블록".
Algol68에서 이를 사용하려면 일반적으로 키워드를 소개하는 문자의 역순을 사용하여 캡슐화를 종료합니다.( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
이후에는 "보호된 블록"이라고 부르겠습니다.에즈거 데이크스트라그리고 그의보호된 명령 언어.
od
아마도 기존 Unix로 인해 Bourne Shell에서는 사용되지 않았을 것입니다."od" 명령.
역사:
"Guarded Block"에 대한 아이디어는 다음에서 나온 것 같습니다. 앨 고어 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의 코드 블록을 빌려왔습니다.에즈거 데이크스트라그를 위해보호된 명령 언어. 예를 들어
if a ≥ b → max := a
| b ≥ a → max := b
fi
아마도 Dijstra는 이를 극복하기 위해 "가드 블록"을 사용했을 것입니다.다른 것에 매달려모호성은 다음과 같이 구현됩니다.알골60그런 다음 다시 디자인C 언어. (보다전환 - 갈등을 줄입니다.)
마지막으로 - Algol68에서 - " esac
"가 1977년에 입력되었습니다.본 쉘(당신이 찾은 곳 esac
) 공손함스티븐 R. 번그는 다음과 같은 초기 Algol68 컴파일러를 개발했습니다.앨 고어 68C.
Stephen은 또한 다음과 같은 "C 헤더 파일"에서 이와 동일한 보호 블록을 사용한 것으로 알려져 있습니다.매크로
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
유명한 소프트웨어 천재랜든 코터 놀그리고래리 바델1984년 National Semiconductor의 Genix 포팅 팀에서 일하던 중 그는 우연히 Steve의 Macro.h 코드를 발견하고 그 응용 프로그램을 이해하는 데 어려움을 겪었습니다. 그래서 랭던과 래리는 이렇게 창조했습니다.국제 난독화 C 코드 대회...
1984년부터 현재까지,수천Dijkstra의 보호된 명령을 사용하지 않는 다른 "더 나은" 프로그래밍 언어입니다. Steven Bourne의 이러한 사용은 macro.h
이제 IT 학부생들이 강의 중에 잠을 자지 않았다는 증거로 "소프트웨어 개발 에세이"에서 자주 인용됩니다. :-)
답변4
예, 필수입니다. Jacob이 위에서 지적했듯이 논리는 if
/ 와 동일 합니다 fi
. 전통적인 C 주석 구분 기호 /*
는 */
유사하게 쌍을 이룹니다. C는 최소한의 어셈블리 코드를 사용하여 Unix를 대부분 C로 작성할 수 있도록 작성되었으며 C와 Unix 개발 팀 사이에 상당한 중복이 있기 때문에 개념의 공통 기원, 많은 동등 항목의 끝을 가정하는 것이 합리적입니다. 문자 블록 구분 기호는 동일한 문자 순서의 역순이어야 합니다.
대신 , , 및 use ... 와 같은 루프를 for
사용 while
합니다. until
문자 do
순서 done
를 바꾸는 대신 다음과 같이 합니다.일부일관성 없는.