Как создать диапазон с шагом n в bash? (сгенерировать последовательность чисел с приращениями) - PullRequest
126 голосов
/ 08 июня 2009

Способ перебора диапазона в bash:

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

Какой будет синтаксис для перебора последовательности с шагом? Скажем, я хотел бы получить только четное число в приведенном выше примере.

Ответы [ 5 ]

179 голосов
/ 08 июня 2009

Я бы сделал

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

(хотя, конечно, seq 0 2 10 будет выдавать тот же результат самостоятельно).

Обратите внимание, что seq допускает числа с плавающей точкой (например, seq .5 .25 3.5), но расширение скобок bash допускает только целые числа.

92 голосов
/ 08 июня 2009

Расширение скобки Bash 4 имеет функцию шага:

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

Независимо от того, используется ли Bash 2/3 (в стиле C для цикла, см. Ответы выше) или в Bash 4, я предпочел бы что-либо, а не команду 'seq'.

57 голосов
/ 08 июня 2009

Pure Bash, без дополнительного процесса:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done
17 голосов
/ 08 июня 2009
#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done
1 голос
/ 05 марта 2019
> 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
...