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 10produrrà lo stesso output da solo).
Si noti che seqconsente 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