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

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

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

EKons
источник
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 или о том, что последнее ;;было необязательным.
Бармар