Was macht ;; in sh tun?

28

Wenn ich versuche, a;;bin sh zu laufen , erhalte ich diesen Fehler:

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

Wenn ich versuche, a;;;bbekomme ich den gleichen Fehler, nicht ;;;statt ;;, also denke ich das;; das etwas bedeutet, obwohl ich nicht weiß, was es bedeutet.

Hier ist ein Beispiel:

$ 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

Hier sieht man, dass wenn ich ; ;stattdessen ;;den Fehler benutze, das anders ist, was die Tatsache angeht, dass ich vorher ;ohne einen Befehl benutzt habe. ;;scheint ein anderer Operator zu sein, obwohl ich nicht weiß, worauf es zutrifft.

EKons
quelle
1
Ich kann wegen der nicht bei Google suchen ;;und habe hier keinen Betrüger gefunden.
EKons
3
Googelte "sh doppeltes Semikolon" ... stackoverflow.com/questions/16905183/…
muru
@muru Obwohl hier noch nicht gepostet, denke ich.
EKons
@ ΈρικΚωνσταντόπουλος Das ist SymbolHound für symbolhound.com
Joe

Antworten:

47

;;trennt Anweisungen in einem case... esac-Konstrukt in POSIX-Shells:

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

Um etwas über einen Befehl herauszufinden, können Sie ausführen man that-command. Wenn es sich bei Ihrem Pager um einen handelt less, können Sie in der Manpage suchen, indem Sie drücken/ .

Hier würdest du laufen man shund suchen ;;. Einige Shells unterstützen andere Operatoren beim Trennen von caseAnweisungen (z. B. ;&in ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash).

Stéphane Chazelas
quelle
1
Ich habe gerade hier gepostet, weil ich denke, dass es sowieso eine solche Frage geben sollte, da hier klarer erklärt werden könnte, ob jemand verwirrt ist.
EKons
2
Wenn es viele Hits sind, oder Sie können die Escape - Regeln für die Suche mit nicht mehr daran erinnern less, dann ist es manchmal praktisch,$ man bash|grep -C1 ';;'
unhammer
Sie sollten nicht (vor a)und b), und Sie müssen ;;nachcmd4
Barmar
@Barmar, diese Syntax ist POSIX. In der Bourne-Shell mussten Sie das in der (Tat weglassen , aber Sie brauchten das ;;vorher noch nicht esac(obwohl es nicht schadete).
Stéphane Chazelas
Vielen Dank. Ich wusste nichts über diese Änderung in der POSIX-Shell oder dass die letzte ;;optional war.
Barmar