在 Bash shell 中,for loop使您能够有效地迭代数字或字符序列。
当涉及到定义序列时,范围就发挥了作用。本教程重点介绍 Bash 范围创建强大循环的能力。
使用大括号 {} 进行范围定义
在 Bash 中,花括号{}
使您能够定义一系列值。语法如下{start..end}
, where start
是初始值并且end
是范围的结束值。
命令:
echo {1..5}
Output:
1 2 3 4 5
在这里,Bash 扩展了 1 到 5 之间的范围(包括 1 和 5)。当。。。的时候回显命令处理扩展,它打印整个范围。
基本数字序列:{start..end}
假设您需要生成一个数字序列。您可以使用{start..end}
语法为此。
命令:
for i in {3..7}; do echo $i; done
Output:
3
4
5
6
7
通过使用带有范围的 for 循环{3..7}
,Bash 迭代 3 到 7 之间的每个数字,随后在新行上回显每个数字。
指定增量值
默认情况下,Bash 在迭代范围时递增 1。但是,您可以通过在花括号内引入第三个参数来指定不同的增量值。
正增量
Command:
for i in {0..10..2}; do echo $i; done
Output:
0
2
4
6
8
10
在本例中,Bash 从 0 开始,到 10 结束,每一步增加 2。
负增量
Command:
for i in {5..1..-1}; do echo $i; done
Output:
5
4
3
2
1
循环从 5 开始并递减 1,向后遍历直到到达终点 1。
复杂的增量模式
有时,您的脚本需要更多序列。混合积极和消极的步骤可能会产生意想不到的结果,因此请谨慎行事。
命令:
echo {5..10..2}{10..5..-2}
Output:
510 58 56 56 54 52 78 76 74 72 910 98 96 96 94 92
该循环首先评估左侧序列,然后附加右侧序列中的值,从而产生复合输出。
字符范围
小写序列
当涉及范围时,也允许使用字符。
命令:
echo {a..d}
Output:
a b c d
shell 扩展了‘a’和‘d’之间的范围,输出序列中的每个字符。
大写序列
大写字符也可以用同样的方式排序。
命令:
echo {A..D}
Output:
A B C D
混合字符序列
组合大写和小写字符对于某些任务非常有益。
命令:
echo {a..b}{A..B}
Output:
aA aB bA bB
Bash 首先处理左侧的范围,然后处理右侧的范围,创建值的组合。
具有数字范围的嵌套循环
嵌套循环使您能够在迭代内执行迭代。
命令:
for i in {1..2}; do for j in {a..b}; do echo "$i$j"; done; done
Output:
1a
1b
2a
2b
这里,外循环循环遍历数字 1 到 2,对于每个数字,内循环处理从“a”到“b”的范围。
混合范围:{1..3}{a..c}
在单个循环中混合数字和字符可以这样完成:
echo {1..3}{a..c}
Output:
1a 1b 1c 2a 2b 2c 3a 3b 3c
此语法有利于生成数字和字符的组合。
处理不可能的范围
并非您定义的每个范围都有效。例如,如果您提供的增量永远不允许循环达到其最终值,Bash 会再次发现它不合逻辑。
echo {1..10..20}
Output:
1
如果某个范围没有逻辑意义,Bash 不会扩展它。