web-dev-qa-db-fra.com

Comment produire une gamme avec step n in bash? (générer une séquence de nombres avec des incréments)

Le moyen de parcourir une plage dans bash est

for i in {0..10}; do echo $i; done

Quelle serait la syntaxe pour parcourir la séquence avec une étape? Dites, je voudrais obtenir seulement un nombre pair dans l'exemple ci-dessus.

131
SilentGhost

Je ferais

for i in `seq 0 2 10`; do echo $i; done

(bien sur seq 0 2 10 produira le même résultat tout seul.

Notez que seq autorise les nombres à virgule flottante (par exemple, seq .5 .25 3.5) mais le développement de l’accolade de bash ne permet que des entiers.

183
chaos

--- L'extension de l'accolade de Bash 4 a une fonctionnalité d'étape:

for {0..10..2}; do
  ..
done

Peu importe que Bash 2/3 (style C pour la boucle, voir les réponses ci-dessus) ou Bash 4, je préfère quoi que ce soit à la commande 'seq'.

97
TheBonsai

Pure Bash, sans processus supplémentaire:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done
57
Fritz G. Mehner
#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done
18
z -
> 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
3
Mir-Ismaili