무엇을 ;; 쉬어?


28

a;;bsh에서 실행하려고 하면이 오류가 발생합니다.

sh: <number>: Syntax error: ";;" unexpected

내가 대신에 a;;;b같은 오류가 발생 하면 의미가 무엇인지 모르지만 그 의미가 있다고 생각합니다 .;;;;;;;

예를 들면 다음과 같습니다.

$ echo A;;echo B
sh: 1: Syntax error: ";;" unexpected
$ echo A;;;echo B
sh: 1: Syntax error: ";;" unexpected
$ echo A; ;echo B
sh: 1: Syntax error: ";" unexpected

여기서 오류 ; ;대신 ;;사용 ;하면 이전에 명령없이 사용했다는 사실과 관련하여 오류가 다르다는 것을 알 수 있습니다 . ;;나는 그것이 적용되는 것을 모르지만 다른 연산자 인 것 같습니다.


1
로 인해 Google에서 검색 할 수 없으며 ;;여기에서 속임수를 찾지 못했습니다.
EKons

3
Googled "sh 이중 세미콜론"... stackoverflow.com/questions/16905183/…
muru

@muru 아직 여기에 게시되지는 않았지만 생각합니다.
EKons

@ ΈρικΚωνσταντόπουλος 이것이 Symbolhound.com을위한 것입니다
Joe

답변:


47

;;POSIX 쉘에서 case... 구문으로 문장을 분리합니다 esac.

case foo in (a) cmd1; cmd2 ;; (b) cmd3; cmd4; esac

명령에 대해 알아 보려면를 실행하십시오 man that-command. 호출기가 less이면을 눌러 매뉴얼 페이지 내에서 검색 할 수 있습니다 /.

여기에서를 실행 man sh하고 검색합니다 ;;. 일부 쉘은 다른 연산자 case(예 ;&: ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash) 를 구분하기 위해 지원 합니다.


1
어쨌든 여기에 그러한 질문이 있어야한다고 생각하기 때문에 여기에 게시했습니다. 여기서 누군가 혼란 스러울 경우 더 명확하게 설명 할 수 있습니다.
EKons

2
조회수가 많거나으로 검색하기위한 이스케이프 규칙을 기억할 수없는 less경우 때때로 편리합니다.$ man bash|grep -C1 ';;'
unhammer

당신은하지 말았어야 (하기 전에 a)그리고 b), 당신은 필요 ;;cmd4
Barmar

@Barmar, 그 구문은 POSIX입니다. Bourne 쉘에서, 당신은 생략했다 (사실,하지만 당신은 여전히 필요하지 않았다 ;;전에 esac(이 해가되지 않았지만).
Stéphane Chazelas

감사. POSIX 셸의 변경 사항에 대해서는 몰랐거나 마지막 ;;옵션은 선택 사항이었습니다.
Barmar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.