Como produzir um intervalo com o passo n no bash?(gera uma sequência de números com incrementos)




range iteration (4)

A maneira de percorrer um intervalo no bash é

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

Qual seria a sintaxe para iterar a sequência com um passo? Diga, eu gostaria de obter apenas um número par no exemplo acima.


#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done

Bash puro, sem um processo extra:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done

eu faria

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

(embora, é claro, o seq 0 2 10 produza a mesma saída por conta própria).

Observe que seq permite números de ponto flutuante (por exemplo, seq .5 .25 3.5 ), mas a expansão de chave do bash permite apenas inteiros.


A expansão de chaves do Bash 4 possui um recurso de etapa:

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

Não importa se Bash 2/3 (estilo C para loop, veja as respostas acima) ou Bash 4, eu prefiro qualquer coisa sobre o comando 'seq'.





iteration