注意:我不是在问this question
我查找了有关如何循环遍历一系列不连续数字的信息,例如0,1,2,4,5,6,7,9,11,而无需将数字放入手工仍然使用范围。
显而易见的方法是:
for i in 0 1 2 4 5 6 7 9 11; do echo $i; done
答案 0 :(得分:20)
for i in {0..2} {4..6} {7..11..2}; do echo $i; done
请参阅bash Brace Expansion的文档。
答案 1 :(得分:2)
编辑:oops,没有意识到数字丢失。
更新:定义范围,然后为每个范围使用while循环。 e.g。
ranges="0-2 4-7 9 11"
for range in $ranges
do
min=${range%-*}
max=${range#*-}
i=$min
while [ $i -le $max ]
do
echo $i
i=$(( $i + 1 ))
done
done
答案 2 :(得分:2)
正如其他人所说,brace expansion
提供了一种选择范围的方法,但您也可以使用echo {..} {..}
将多个括号扩展的结果分配给变量。这可能会减少for
循环体内的输入:
#!/bin/bash
range="`echo {2..6} {31..35} {50..100..10}`"
for i in $range; do echo $i; done
exit 0
<强>输出:强>
2
3
4
5
6
31
32
33
34
35
50
60
70
80
90
100
答案 3 :(得分:1)
for i in `cat file.txt`; do echo $i; done
其中file.txt包含:
0
1
2
4
5
6
7
9
11