zsh中的命令行上的for循环:解析“ done”附近的错误

时间:2018-10-20 15:37:54

标签: bash for-loop command-line zsh parse-error

我不明白为什么会收到此错误?对我来说,语法似乎不错。

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

第一个$是PS1-在常规的“命令行”上-不在文件中。

1 个答案:

答案 0 :(得分:1)

我的命令中缺少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。 (可选)您可以通过多种方式install the shellcheck command

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