23 我想知道为什么在循环中使用异步命令会出错? $ for i in {1..8}; do sleep 100 & ; done bash: syntax error near unexpected token `;' 如果我写成 $ for i in {1..8}; do > sleep 100 & > done 这很好。 如何将其写成一行而没有错误? bash — 提姆 source
39 删除;: for i in {1..8}; do sleep 100 & done &分隔命令,所以;是多余的(shell期望在&和之间有一些东西;)。 — 斯蒂芬·基特 source 谢谢。“ shell期望&和;之间有一些东西”,那么为什么&和;之间没有空命令可以呢? — 蒂姆(Tim) 5 真正的无操作命令是: — HTNW 1 @StephenKitt,您引用的部分还指出:“在交互式会话或带有其他命令的脚本中,多余的<newline>或<semicolon>字符...将不被视为此处所述的空命令,因为它们将被其他命令消耗语法的一部分。” 嗯... — 通配符 1 @Wildcard很有意思,在研究蒂姆后续行动的答案时,我没有考虑过那句话的后果。在这方面,启用Bash的POSIX模式不会改变其行为。嗯,确实是…… — Stephen Kitt 2 @Wildcard:echo foo ; ; echo bar在bash 4.4中说syntax error near unexpected token `;'。 dash给出了类似的错误。在这种情况下,这是一个空命令,因为语法的其他部分都不会使用它。我认为他们可能;在sleep 100;(newline)等行的末尾谈论冗余。 — 彼得·科德斯