Co robi ;; robić w sh?


28

Jeśli spróbuję uruchomić a;;bw sh, pojawia się ten błąd:

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

Jeśli spróbuję a;;;b, otrzymam ten sam błąd, nie ;;;zamiast ;;, więc myślę, że ;;to coś znaczy, chociaż nie wiem, co to znaczy.

Oto przykład:

$ 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

Tutaj możesz zobaczyć, że kiedy używam ; ;zamiast ;;błędu, jest inny, odnoszący się do faktu, że użyłem wcześniej ;bez polecenia. ;;wydaje się być innym operatorem, chociaż nie wiem, czego dotyczy.


1
Nie mogę wyszukiwać w Google z powodu ;;i nie znalazłem tutaj duplikatu.
EKons,

3
Googled „sh double średnik” ... stackoverflow.com/questions/16905183/…
mur

@muru Myślę, że chociaż jeszcze tu nie opublikowano.
EKons,

@ ΈρικΚωνσταντόπουλος To właśnie jest SymbolHound dla symbolhound.com
Joe

Odpowiedzi:


47

;;rozdziela instrukcje w case... esackonstrukcji w powłokach POSIX:

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

Aby dowiedzieć się o poleceniu, możesz uruchomić man that-command. Jeśli masz pager less, możesz przeszukiwać stronę podręcznika, naciskając /.

Tutaj biegałeś man shi szukałeś ;;. Niektóre powłoki obsługują inne operatory do oddzielania caseinstrukcji (np. ;&In ksh93/ zsh/ bash/ mksh, &|in zsh/ mksh, ;;&in bash).


1
Właśnie napisałem tutaj, ponieważ myślę, że i tak powinno tu być takie pytanie, ponieważ tutaj można je wyjaśnić jaśniej, jeśli ktoś jest zdezorientowany.
EKons,

2
Jeśli jest wiele trafień lub nie pamiętasz uciekających zasad wyszukiwania less, czasem przydaje się$ man bash|grep -C1 ';;'
unhammer

Nie powinieneś mieć (przed a)i b), a potrzebujesz ;;późniejcmd4
Barmar

@Barmar, ta składnia to POSIX. W Bourne shell, trzeba było pominąć (rzeczywiście, ale nadal nie potrzebne ;;przed esac(choć nie zaszkodzi).
Stéphane Chazelas,

Dzięki. Nie wiedziałem o tej zmianie w powłoce POSIX, ani że ta ostatnia ;;była opcjonalna.
Barmar,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.