цикл for в командной строке в zsh: ошибка разбора рядом с `done ' - PullRequest
0 голосов
/ 20 октября 2018

Я не понимаю, почему я получаю эту ошибку?Мне кажется, это хороший синтаксис.

$ for f in todo/family/* ; echo "$f" ; done
zsh: parse error near `done'

Первый $ - это PS1 - это обычная «командная строка», а не файл.

1 Ответ

0 голосов
/ 23 октября 2018

Отсутствует do в моей команде.

Согласно комментарию @ CharlesDuffy, это явно проблема, связанная с опечаткой / отсутствующим синтаксисом.

What I wrote:  for f in todo/family/* ; echo "$f" ; done
#                                      ^ missing do

Bash expected: for f in todo/family/* ; do echo "$f" ; done

Ясно, что эта ошибка / опечатка виднаиспользуя spellcheck.net (еще один замечательный ресурс) - спасибо Чарльзу.


Как проверить ошибки синтаксиса, связанные с Bash:

1.Перейдите на shellcheck.net и вставьте его в:

#!/bin/sh

for f in todo/family/* ; echo "$f" ; done

Вы ясно увидите ошибку:

$ shellcheck myscript

Line 3:
for f in todo/family/* ; echo "$f" ; done
^-- SC1073: Couldn't parse this for loop. Fix to allow more checks.
                         ^-- SC1058: Expected 'do'.
                         ^-- SC1072: Expected 'do'. Fix any mentioned problems and try again.

Добавьте do с пробелом, простодо echo и все проверяется:

#!/bin/sh

for f in todo/family/* ; do echo "$f" ; done

в spellcheck.net - вы видите, что ошибки нет.Удалите do, и вы увидите, в чем заключалась моя проблема.

2.При желании вы можете установить команду shellcheck обильным образом:

https://github.com/koalaman/shellcheck#installing

...