如何在bash for循环中迭代多个不连续范围

时间:2014-08-08 01:07:25

标签: bash

注意:我不是在问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

4 个答案:

答案 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

http://ideone.com/T80tfB

答案 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