#zsh
Вопрос:
По ошибке я набрал что-то вроде этого:
for f in a b; echo a; echo x
Произведенная продукция была
a a x
как будто я написал
for f in a b; do echo a; done; echo x
Может ли кто-нибудь объяснить, почему мой код привел этот пример? Проверяя справочную страницу, она четко указывает, что требуемый синтаксис должен быть
для имени … [ в слове … ] список дел на срок завершен
Ни один короткий путь не объясняет, что я мог бы опустить do
операционную done
.
Я запускаю zsh 5.8
Ответ №1:
Несколько сбивает с толку то, что этот синтаксис не описан в разделе, в котором вводится for
цикл. Вместо этого он указан вместе с некоторыми другими версиями коротких команд в отдельной части zshmisc
справочной страницы под названием АЛЬТЕРНАТИВНЫЕ ФОРМЫ ДЛЯ СЛОЖНЫХ КОМАНД.
для имени … [ в слове … ] подсписок терминов
, где термин представляет собой по крайней мере одну новую строку или ;. Еще одна короткая форма для.
Во введении к разделу упоминаются некоторые предостережения:
Многие сложные команды zsh имеют альтернативные формы. Они нестандартны и, вероятно, не будут очевидны даже опытным программистам оболочки; их не следует использовать нигде, где бы не беспокоила переносимость кода оболочки.
Приведенные ниже короткие версии работают только в том случае, если подлист имеет форму «{список} » или если установлен параметр SHORT_LOOPS.
Комментарии:
1. Огромное спасибо. Это так странно, что мне это может понравиться. Кстати, если я когда-нибудь выпрыгну из окна в бешенстве, то это потому, что я пытаюсь получить какую-то отчаянно необходимую информацию с главной страницы zsh. Он содержит все, что нам нужно, но постоянно по частям, на которые мы не смотрим.