В чем причина странного синтаксиса оператора case в сценарии bash / zsh?

Взгляд со стороны программиста » С точки зрения, сценарий оболочки - это просто еще один язык программирования, где нужно учиться и соблюдать правила языка. Однако я должен признать, что этот синтаксис - самый странный стиль, который я когда-либо видел в довольно часто используемом языке. Оболочка позаимствовала этот синтаксис из более старого языка, от которого она произошла? Есть ли в синтаксисе особое значение / значение?

В качестве примера, вот небольшой фрагмент, который я взял из другого сообщения на SO

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        check_status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac

Глядя на это, во-первых, я вижу, что case заканчивается на esac , который является его обратной формой (например, if оканчивается на fi ). Во-вторых, я понимаю, что за каждым случаем следует ) . Достаточно честно, но зачем мне два ; в конце каждого утверждения? Я бы также сказал, что ) без сопровождающего ( уродлив.

Я ищу дополнительную информацию об историческом аспекте языка, но я открыт для также по техническим причинам.

45
задан Community 23 May 2017 в 12:26
поделиться