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

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

我们来举个简单的for loop

#!/bin/bash

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

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

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

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

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

答案1

for手册页中循环的语法bash

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

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

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

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

答案2

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

以下正确运行:

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

答案3

尝试一下:

> for name in {Regular,Italic,Bold-Italic}; do echo $name;done
Regular
Italic
Bold-Italic

该元素{1,2,3}称为大括号扩展。基本上,您的 shell 会扩展此元素并使用 for 循环中生成的每个条目(看这里有关支架扩展的更多信息)。如果不使用{},shell 将理解1,2,3为单个元素,并且只会在循环中通过一次,产生

❯ for name in Regular,Italic,Bold-Italic; do echo $name;done
Regular,Italic,Bold-Italic

这可能不是你所期望的......

或者,您还可以使用大括号扩展来使用以下表示法创建序列

❯ for i in {1..5}; do echo $i; done
1
2
3
4
5

值得一提的是,您可以使用大括号扩展创建具有序列模式的不同字符串,并将其用于 for 循环,如下所示:

❯ for i in A{1..5}BC; do echo $i; done
A1BC
A2BC
A3BC
A4BC
A5BC

相关内容