首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash for循环中遍历多个不连续的范围?

问如何在bash for循环中遍历多个不连续的范围?
EN

Stack Overflow用户
提问于 2014-08-08 01:07:24
回答 4查看 14.7K关注 0票数 13

注意:我不是在问this question

我寻找关于如何遍历0,1,2,4,5,6,7,9,11等一系列不连续数的信息,而不必手工输入这些数字,并且仍然使用范围。

显而易见的方法是这样做:

代码语言:javascript
复制
for i in 0 1 2 4 5 6 7 9 11; do echo $i; done
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-08 01:13:47

代码语言:javascript
复制
for i in {0..2} {4..6} {7..11..2}; do echo $i; done

请参阅bash Brace Expansion的文档。

票数 30
EN

Stack Overflow用户

发布于 2014-08-08 01:09:58

编辑:哎呀,我没意识到有数字丢失了。

Updated:定义范围,然后对每个范围使用while循环。例如:

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2014-08-08 01:34:43

正如其他人所指出的,brace expansion提供了一种选择范围的方法,但您也可以使用echo {..} {..}将多个大括号展开的结果分配给变量。这可能会减少for循环正文中的输入:

代码语言:javascript
复制
#!/bin/bash

range="`echo {2..6} {31..35} {50..100..10}`"

for i in $range; do echo $i; done

exit 0

输出:

代码语言:javascript
复制
2
3
4
5
6
31
32
33
34
35
50
60
70
80
90
100
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25194635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档