185

在 bash 中迭代一个范围的方法是

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

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

4

6 回答 6

238

我会做

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

(虽然当然seq 0 2 10会自己产生相同的输出)。

请注意,它seq允许浮点数(例如,seq .5 .25 3.5),但 bash 的大括号扩展只允许整数。

于 2009-06-08T17:35:24.710 回答
141

Bash 4的大括号扩展有一个 step 特性:

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

无论是 Bash 2/3(C 风格的 for 循环,参见上面的答案)还是 Bash 4,我都更喜欢 'seq' 命令。

于 2009-06-08T17:58:43.283 回答
92

纯 Bash,无需额外过程:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done
于 2009-06-08T17:48:03.610 回答
23
#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done
于 2009-06-08T17:35:28.563 回答
9
$ 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 2 12
4,6,8,10,12
于 2019-03-05T11:53:10.217 回答
1

大括号扩展 {m..n..s} 比 seq 更有效。并且它允许一些输出格式:

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

如果一个数字例如文件和想要的'ls'的排序输出,这很有用。

于 2021-08-12T10:19:34.600 回答