如何编写在每次迭代中运行异步命令的 for 循环?

Tim*_*Tim 24 bash

我想知道为什么在循环中使用异步命令会出错?

$ for i in {1..8}; do sleep 100 & ; done
bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

如果我把它写成

$ for i in {1..8}; do 
> sleep 100 & 
> done
Run Code Online (Sandbox Code Playgroud)

这工作正常。

我怎样才能把它写在一行而不出错?

Ste*_*itt 43

删除;:

for i in {1..8}; do sleep 100 & done
Run Code Online (Sandbox Code Playgroud)

&分隔 commands,因此 the;是无关紧要的(并且 shell 期望在&和之间有一些东西;)。

  • 真正的无操作命令是: (5认同)
  • @通配符:`echo foo ; ; bash 4.4 中的 echo bar` 表示“意外标记附近的语法错误\`;'`。`dash` 给出了类似的错误。在这种情况下,它是一个空命令,因为没有其他语法部分使用它。我认为他们可能会在像 `sleep 100;`(换行)这样的行的末尾谈论多余的 `;`。 (2认同)

Pan*_*dya 22

将您的do操作分组在大括号中:

for i in {1..8}; do { sleep 100 & }; done
Run Code Online (Sandbox Code Playgroud)

对您和 Bash 来说都很容易理解!