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

for loop on command line in zsh: parse error near `done'

我不明白为什么会出现此错误?对我来说这似乎是一个很好的语法。

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

第一个 $ 是 PS1 - 这是常规 "command line" - 不在文件中。

我的命令中缺少 do

根据@CharlesDuffy 的评论,这显然是一个 typo/missing 语法相关问题。

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

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

很明显,这个 error/typo 使用 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 添加到 space,就在 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