Pull to refresh

Comments 9

Хабр не показывает в статье то, что идёт до ката.

(цитата из буфера обмена не вставляется, кто хочет, может посмотреть текст в списке статей автора)

И никаких брейков тут не надо, не будь брейккером, заканчивается кейс двойной точкой с запятой ;;

Это понятно, что в норме он там не нужен — потому и возник вопрос, откуда всё-таки в коде взялся break и для чего его туда засунули. Конечно, есть вариант, что писал сишник, привыкший ставить брейки, но ведь могли быть и другие причины…

История умалчивает, я предположил что кода-то этот кусок когда был в цикле.

Все привыкли к башу как к данности, так что стоит лишний раз явно упомянуть: bash != sh, и sh просто не поддерживает ни кейс, ни многое другое башовое. Это так, просто дружеское напоминание тем, кто может споткнуться.

sh просто не поддерживает ни кейс, ни многое другое башовое.

Эээ, вообще-то как раз поддерживает: 2.9.4.3 Case Conditional Construct. Башизмами в данной статье являются:

  • Нестандартные расширения переменных, не перечисленные в 2.6.2 Parameter Expansion.

  • Нестандартное окончание ветки ;;&. POSIX допускает только ;; и ;&, причём второй вариант довольно новый, и много кем не поддерживается; например, dash (sh по умолчанию в Debian) знает только ;;.

А сам case появился еще в Bourne Shell в Unix V7 (1979).

Спасибо. Да, в деталях я профан, но всё же моё напоминание не лишено смысла. Например, недавно писал скрипт под bash, который поломался под ash-ем в alpine 3.21, пришлось коректировать. Фокус в том, что там /bin/sh это симлинк на ash в busybox (технически, нам сам /bin/busybox) v1.37.

Sign up to leave a comment.

Articles