Что значит ;; делать в ш?


28

Если я пытаюсь запустить a;;bв sh, я получаю эту ошибку:

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

Если я пытаюсь a;;;bполучить ту же ошибку, а не ;;;вместо нее ;;, я думаю, что ;;это что- то значит, хотя я не знаю, что это значит.

Вот пример:

$ 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

Здесь вы можете видеть, что когда я использую ; ;вместо ;;ошибки разные, относящиеся к тому, что я использовал ;без команды раньше. ;;похоже, другой оператор, хотя я не знаю, к чему это относится.


1
Не могу найти в Google из-за ;;, и не нашли здесь обман.
EKons

3
Гугле «ш двойная точки с запятой» ... stackoverflow.com/questions/16905183/...
Мура

@muru Хотя не размещен здесь, я думаю.
EKons

@ ΈρικΚωνσταντόπουλος Это то, что SymbolHound для symbolhound.com
Джо

Ответы:


47

;;разделяет операторы в конструкции case... esacв оболочках POSIX:

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

Чтобы узнать о команде, вы можете запустить man that-command. Если ваш пейджер есть less, вы можете искать на странице справочника, нажав /.

Здесь вы будете бегать man shи искать ;;. Некоторые оболочки поддерживают другие операторы для разделения caseоператоров (например, ;&в ksh93/ zsh/ bash/ mksh, &|в zsh/ mksh, ;;&в bash).


1
Я только что написал здесь, потому что я думаю, что в любом случае здесь должен быть такой вопрос, поскольку здесь он может быть объяснен более четко, если кто-то запутается.
EKons

2
Если хитов много, или вы не можете вспомнить экранирующие правила для поиска less, это иногда удобно$ man bash|grep -C1 ';;'
unhammer

Вы не должны были (до a)и b), и вам нужно ;;послеcmd4
Бармар

@ Barmar, этот синтаксис POSIX. В оболочке Bourne вы должны были опустить (действительно, но вам все еще не нужно ;;раньше esac(хотя это не повредило).
Стефан

Спасибо. Я не знал об этом изменении в оболочке POSIX или о том, что последнее ;;было необязательным.
Бармар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.