форма по умолчанию команды for
в Zsh не использует скобки (если они есть, они не являются д в рамках for
заявления):
for string in some random strings to print
do
echo $string
done
Есть также несколько коротких форм, доступных для for
:
для одиночных команд (чтобы быть точным: разовые трубопроводов или нескольких трубопроводов, связанных с &&
или ||
, где трубопровод может быть только одна команда) есть два варианта:
форма по умолчанию, только без do
или done
:
for string in some random strings to print ; echo string
без in
, но с круглыми скобками, а также без do
или done
for string (some random strings to print) ; echo $string
для списка команд (как в стандартном формы), foreach
вместо for
, без in
, с круглыми скобками и заканчивающийся end
:
foreach string (some random strings to print) echo $string ; end
В вашем случае, вы смешали две короткие формы для отдельных команд. Из-за наличия in
zsh не взял круглые скобки как синтаксический элемент команды for
. Вместо этого они интерпретируются как квалификатор glob. Помимо того, что вы не намерены никаких имен файлов расширения, это не удается по двум причинам:
нет никакой закономерности (с или без фактических комков) до Глоб классификатором. Таким образом, любое совпадающее имя файла должно точно соответствовать пустой строке, что просто невозможно.
но в основном «некоторые случайные строки для печати» не является допустимым квалификатором glob. Вероятно, вы получите сообщение об ошибке «zsh: unknown file attribute: i» (по крайней мере, с zsh 5.0.5, это может зависеть от версии zsh).
Я знаю, что мы можем использовать переменную, чтобы сделать это; Я спрашиваю, есть ли способ избежать его использования? –
Что не так с 'for x (1 2 3); do echo $ x; done' и 'for x in 1 2 3; do echo $ x; сделано?? –
Вау! Это точно! Нет необходимости использовать 'in' при использовании массива? Можете ли вы, пожалуйста, обновить ответ, я отмечу как ответ. –