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