Que hace ;; hacer en sh?

28

Si intento ejecutar a;;ben sh, me sale este error:

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

Si lo intento a;;;b, obtengo el mismo error, no en ;;;lugar de ;;, así que creo que eso ;;significa algo, aunque no sé qué significa.

Aquí hay un ejemplo:

$ 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

Aquí puede ver que cuando uso en ; ;lugar del ;;error es diferente, relacionado con el hecho de que lo usé ;sin un comando antes. ;;parece ser un operador diferente, aunque no sé a qué se aplica.

EKons
fuente
1
No puedo buscar en Google debido a ;;, y no he encontrado un engaño aquí.
EKons
3
Buscó en Google "doble punto y coma" ... stackoverflow.com/questions/16905183/…
muru
@muru Aunque no publicado aquí todavía creo.
EKons
@ ΈρικΚωνσταντόπουλος Eso es lo que SymbolHound es para symbolhound.com
Joe

Respuestas:

47

;;separa las declaraciones en una case... esacconstrucción en shells POSIX:

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

Para obtener información sobre un comando, puede ejecutar man that-command. Si su buscapersonas es less, puede buscar dentro de la página de manual presionando /.

Aquí, correría man shy buscaría ;;. Algunos shells admiten otros operadores para separar casedeclaraciones (como ;&en ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash).

Stéphane Chazelas
fuente
1
Acabo de publicar aquí porque creo que debería haber una pregunta así de todos modos, ya que aquí podría explicarse de una manera más clara si alguien está confundido.
EKons
2
Si hay muchos éxitos, o no puedes recordar las reglas de escape para buscar less, a veces es útil$ man bash|grep -C1 ';;'
destrabar el
No deberías tener (antes a)y b), y necesitas ;;despuéscmd4
Barmar
@Barmar, esa sintaxis es POSIX. En el shell Bourne, tenía que omitir el (hecho, pero aún no necesitaba el ;;antes esac(aunque no perjudicó).
Stéphane Chazelas
Gracias. No sabía sobre ese cambio en el shell POSIX, o que el último ;;era opcional.
Barmar