Как производить диапазон с шагом n в bash? (сгенерировать последовательность чисел с приращениями)
Способ перебора диапазона в bash -
for i in {0..10}; do echo $i; done
Каким будет синтаксис для итерации по последовательности с шагом? Скажем, я хотел бы получить только четное число в приведенном выше примере.
Ответы
Ответ 1
Я бы сделал
for i in `seq 0 2 10`; do echo $i; done
(хотя, конечно, seq 0 2 10
сам выдаст один и тот же результат).
Обратите внимание, что seq
допускает число с плавающей запятой (например, seq .5 .25 3.5
), но bash расширение расширений допускает только целые числа.
Ответ 2
Bash 4 Расширение скобки имеет ступенчатую функцию:
for {0..10..2}; do
..
done
Независимо от того, Bash 2/3 (C-стиль для цикла, см. ответы выше) или Bash 4, я бы предпочел что-либо по команде seq.
Ответ 3
Чистый Bash, без дополнительного процесса:
for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
echo $COUNTER
done
Ответ 4
#!/bin/bash
for i in $(seq 1 2 10)
do
echo "skip by 2 value $i"
done