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.


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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.