如何在Bash中生成第n步的范围?(生成带有增量的数字序列)

在bash中遍历一个范围的方法是

for i in {0..10}; do echo $i; done

使用步骤对序列进行迭代的语法是什么?比如说,在上面的例子中,我只想得到偶数。

162589 次浏览

I'd do

for i in `seq 0 2 10`; do echo $i; done

(though of course seq 0 2 10 will produce the same output on its own).

Note that seq allows floating-point numbers (e.g., seq .5 .25 3.5) but bash's brace expansion only allows integers.

#!/bin/bash
for i in $(seq 1 2 10)
do
echo "skip by 2 value $i"
done

Pure Bash, without an extra process:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
echo $COUNTER
done

Bash 4's brace expansion has a step feature:

for {0..10..2}; do
..
done

No matter if Bash 2/3 (C-style for loop, see answers above) or Bash 4, I would prefer anything over the 'seq' command.

Use seq command:

$ seq 4
1
2
3
4


$ seq 2 5
2
3
4
5


$ seq 4 2 12
4
6
8
10
12


$ seq -w 4 2 12
04
06
08
10
12


$ seq -s, 4
1,2,3,4

brace expansion {m..n..s} is more efficient than seq. AND it allows a bit of output formatting:

$ echo {0000..0010..2}
0000 0002 0004 0006 0008 0010

which is useful if one numbers e.g. files and want's a sorted output of 'ls'.