Il modo di iterare su un intervallo in bash è
for i in {0..10}; do echo $i; done
Quale sarebbe la sintassi per iterare sulla sequenza con un passaggio? Dire, vorrei ottenere solo il numero pari nell'esempio sopra.
Il modo di iterare su un intervallo in bash è
for i in {0..10}; do echo $i; done
Quale sarebbe la sintassi per iterare sulla sequenza con un passaggio? Dire, vorrei ottenere solo il numero pari nell'esempio sopra.
Risposte:
Farei
for i in `seq 0 2 10`; do echo $i; done
(anche se ovviamente seq 0 2 10
produrrà lo stesso output da solo).
Si noti che seq
consente numeri in virgola mobile (ad es. seq .5 .25 3.5
) Ma l'espansione del controvento di bash consente solo numeri interi.
L'espansione del controvento di Bash 4 ha una funzione di passaggio:
for {0..10..2}; do
..
done
Non importa se Bash 2/3 (stile C per loop, vedi le risposte sopra) o Bash 4, preferirei qualsiasi cosa al comando 'seq'.
i
, non è possibile farlo for {0..10..${i}}
.. fallisce.
Pure Bash, senza un processo aggiuntivo:
for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
echo $COUNTER
done
#!/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