O que ;; fazer em sh?

28

Se eu tentar executar a;;bno sh, recebo este erro:

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

Se eu tentar a;;;b, recebo o mesmo erro, não em ;;;vez de ;;, então acho que isso ;;significa alguma coisa, embora eu não saiba o que isso significa.

Aqui está um exemplo:

$ 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

Aqui você pode ver que quando eu uso em ; ;vez do ;;erro é diferente, referente ao fato de eu ter usado ;sem um comando antes. ;;parece ser um operador diferente, embora eu não saiba ao que se aplica.

EKons
fonte
1
Não é possível pesquisar no Google por causa do ;;, e não encontrei um dupe aqui.
EKons
3
Pesquisei "sh ponto-e-vírgula duplo" ... stackoverflow.com/questions/16905183/…
muru
@ muru Embora ainda não postado aqui, eu acho.
EKons
@ ΈρικΚωνσταντόπουλος Isso é o que SymbolHound é para symbolhound.com
Joe

Respostas:

47

;;separa instruções em uma construção case... esacem shells POSIX:

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

Para descobrir um comando, você pode executar man that-command. Se o seu pager for less, você pode pesquisar na página de manual pressionando /.

Aqui, você executaria man she procuraria ;;. Alguns shells suportam outros operadores para separar caseinstruções (como ;&em ksh93/ zsh/ bash/ mksh, &|em zsh/ mksh, ;;&in bash).

Stéphane Chazelas
fonte
1
Eu acabei de postar aqui porque acho que deveria haver uma pergunta aqui de qualquer maneira, já que aqui poderia ser explicada de uma maneira mais clara se alguém estiver confuso.
EKons
2
Se existem muitos hits, ou você não consegue lembrar as regras de escape para pesquisar com less, às vezes é útil para$ man bash|grep -C1 ';;'
unhammer
Você não deve ter (antes a)e b), e você precisa ;;depoiscmd4
Barmar
@ Barmar, essa sintaxe é POSIX. No shell Bourne, você tinha que omitir o (fato, mas ainda não precisava do ;;antes esac(embora não tenha prejudicado).
Stéphane Chazelas 19/04
Obrigado. Eu não sabia sobre essa alteração no shell do POSIX ou que a última ;;foi opcional.
Barmar