Cosa fa ;; fare in sh?


28

Se provo a eseguire a;;bin sh, ottengo questo errore:

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

Se provo a;;;bottengo lo stesso errore, non ;;;invece di ;;, quindi penso che ;;significhi qualcosa, anche se non so cosa significhi.

Ecco un esempio:

$ 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

Qui puoi vedere che quando uso ; ;invece ;;l'errore è diverso, pertinente al fatto che ho usato ;senza un comando prima. ;;sembra essere un operatore diverso, anche se non so a cosa si applica.


1
Non è possibile effettuare ricerche su Google a causa del ;;e non ho trovato un duplicato qui.
EKons,

3
Googled "sh double semicolon" ... stackoverflow.com/questions/16905183/…
muru,

@muru Anche se non ancora pubblicato qui, penso.
EKons,

@ ΈρικΚωνσταντόπουλος Ecco cos'è SymbolHound per symbolhound.com
Joe

Risposte:


47

;;separa le istruzioni in un costrutto case... esacnelle shell POSIX:

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

Per scoprire un comando, puoi eseguire man that-command. Se il tuo cercapersone lo è less, puoi cercare nella pagina man premendo /.

Qui, corri man she cerchi ;;. Alcune shell supportano altri operatori per separare le caseistruzioni (come ;&in ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash).


1
Ho appena pubblicato qui perché penso che dovrebbe esserci comunque una domanda del genere, poiché qui potrebbe essere spiegata in modo più chiaro se qualcuno è confuso.
EKons,

2
Se ci sono molti successi, o non ricordi le regole di fuga per la ricerca less, a volte è utile$ man bash|grep -C1 ';;'
unhammer

Non avresti dovuto (prima a)e b), e ;;dopocmd4
Barmar,

@Barmar, quella sintassi è POSIX. Nel guscio di Bourne, dovevi omettere (davvero, ma non avevi ancora bisogno del ;;prima esac(anche se non faceva male).
Stéphane Chazelas,

Grazie. Non sapevo di quel cambiamento nella shell POSIX o che l'ultimo ;;fosse facoltativo.
Barmar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.