Почему разделитель не требуется в `for i do cmd; сделано` [дубликат]

    

На этот вопрос уже есть ответ здесь:

    
for i do echo $i; done

Как это вообще законно? (Я ожидаю, что он будет написан с дополнительной точкой с запятой for i; do echo $i; done). Он работает в bash, dash, zsh и ksh. Стандарт (под которым я имею в виду http://pubs.opengroup.org/onlinepubs/9699919799/а)) заявляет:

The for loop requires that the reserved words do and done be used to
delimit the sequence of commands.  The format for the for loop is as follows:

    for name [ in [word ... ]]
    do
        compound-list
    done

Так что, когда слово "in word" опущено, do служит разделителем. Таким образом, подразумевается, что разделитель (символ новой строки) после [ in [word .. ]] фактически находится внутри закрывающей правой скобки. Может ли кто-то указать в стандарте что-либо, оправдывающее это (IMO) ужасное злоупотребление языком?

7 голосов | спросил William Pursell 20 PMpFri, 20 Apr 2018 16:41:08 +030041Friday 2018, 16:41:08

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132