La façon d'itérer sur une plage dans bash est
for i in {0..10}; do echo $i; done
Quelle serait la syntaxe pour itérer sur la séquence avec une étape? Dites, je voudrais obtenir uniquement un nombre pair dans l'exemple ci-dessus.
La façon d'itérer sur une plage dans bash est
for i in {0..10}; do echo $i; done
Quelle serait la syntaxe pour itérer sur la séquence avec une étape? Dites, je voudrais obtenir uniquement un nombre pair dans l'exemple ci-dessus.
Réponses:
je ferais
for i in `seq 0 2 10`; do echo $i; done
(bien sûr seq 0 2 10
produira le même résultat tout seul).
Notez que seq
permet les nombres à virgule flottante (par exemple, seq .5 .25 3.5
) mais l'expansion d'accolades de bash n'autorise que les entiers.
L'expansion des accolades de Bash 4 a une fonction d'étape:
for {0..10..2}; do
..
done
Peu importe si Bash 2/3 (C-style for loop, voir les réponses ci-dessus) ou Bash 4, je préférerais n'importe quoi à la commande 'seq'.
i
, vous ne pouvez pas le faire for {0..10..${i}}
.. elle échoue.
Pure Bash, sans processus supplémentaire:
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