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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.