如何在命令行中创建 for 循环?

use*_*167 44 shell bash

我们来个简单的 for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

bash 脚本中的 AFAIK 分号使 shell 同步执行当前命令,然后转到下一个命令。按回车键实际上是一样的,只是它不允许您输入以下命令,立即刷新缓冲区。

那么为什么shell不能解释以下行

for i in `seq 1 10`; do; echo $i; done
Run Code Online (Sandbox Code Playgroud)

for loop实际上是如何工作的?

use*_*274 55

手册页中for循环的语法bash

for name [ [ in [ word ... ] ] ; ] do list ; done
Run Code Online (Sandbox Code Playgroud)

分号可以用回车代替,如bash手册页的其他地方所述:“一个或多个换行符的序列可能出现在列表中,而不是分号来分隔命令。”

然而,反过来就不是这样了。您不能随意用分号替换换行符。只要您遵守上述语法规则并且不在 之后插入额外的分号,您的多行脚本就可以转换为单行do

for i in `seq 1 10`; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

  • 最后的脚本是错误的,正如@dr01 指出的,你需要去掉`do` 后面的分号。 (2认同)
  • @jake,这也说你必须在`do` 之后删除分号。此外,这个答案解释了_为什么_您必须在“do”之后删除分号。 (2认同)

dr_*_*dr_ 30

后面的分号do是错误的,不应该出现。

以下工作正常:

for i in `seq 1 10`; do echo $i; done 
Run Code Online (Sandbox Code Playgroud)