注意:我不是在问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发布于 2014-08-08 01:13:47
for i in {0..2} {4..6} {7..11..2}; do echo $i; done请参阅bash Brace Expansion的文档。
发布于 2014-08-08 01:09:58
编辑:哎呀,我没意识到有数字丢失了。
Updated:定义范围,然后对每个范围使用while循环。例如:
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发布于 2014-08-08 01:34:43
正如其他人所指出的,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
100https://stackoverflow.com/questions/25194635
复制相似问题