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 以多种方式:
我不明白为什么会出现此错误?对我来说这似乎是一个很好的语法。
$ 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
,您将看到我的问题所在。