如何在命令行中进行for循环?


22

让我们简单 for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

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

那么为什么shell无法解释以下行

for i in `seq 1 10`; do; echo $i; done

for loop实际上如何工作?

Answers:


16

手册页中for循环的语法bash

for name [ [ in [ word ... ] ] ; ] do list ; done

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

但是,事实并非如此。您不能随意用分号替换换行符。只要遵守上述语法规则,并且在do:之后不要插入多余的分号,您的多行脚本就可以转换为单行:

for i in `seq 1 10`; do echo $i; done

2
最终脚本是错误的,正如@ dr01指出的那样,您需要在后面删除分号do
杰克

1
@jake,这也表示您必须在之后删除分号do。另外,此答案说明了为什么必须在执行“ do”之后删除分号。
user4556274'3

如果$i需要成为文件名的一部分怎么办?是否需要双引号?
匿名

18

之后的分号do是一个错误,不应存在。

以下内容可以正常工作:

for i in `seq 1 10`; do echo $i; done 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.