2009-06-08 14 views

Respuesta

131

lo haría

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

(aunque, por supuesto seq 0 2 10 producirá el mismo resultado por sí solo).

Tenga en cuenta que seq permite números de coma flotante (por ejemplo, seq .5 .25 3.5) pero la expansión de llaves de bash solo permite números enteros.

+1

Supongo que el voto negativo se debió a que tu respuesta fue genérica a 'sh' y no a 'bash'. El enfoque Bash puro {begin end step} funciona un poco mejor. El viejo método 'seq' es útil en sistemas más antiguos o de memoria más pequeña como busybox. No he votado tanto su respuesta como la de TheBonsai. :) –

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

seq es un comando de Linux. Esto no estará disponible en Mac OS X o FreeBSD. – Dereckson

+3

FWIW seq está disponible en mi OS X Mavericks 10.9.1 –

+0

estándar. He probado otro sintaxis, pero ese es el único que funciona para mi en un poco de CentOS. @z - me ha salvado el día: D – erm3nda

44

Bash puro, sin un proceso adicional:

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

+1 Porque el paso también puede ser reemplazado por una variable. –

70

Bash 4 's expansión de llaves tiene una característica de paso:

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

No importa si Bash 2/3 (C-style for loop, ver respuestas arriba) o Bash 4, preferiría algo más que el comando 'seq'.

+1

¿podría explicar por qué? – SilentGhost

+0

y, por cierto, ¿sabes si bash4 está predeterminado en cualquier sistema operativo principal? – SilentGhost

+2

Bash4 todavía no es convencional, no. ¿Por qué no seq? Bueno, digámoslo con las palabras del bot en el canal IRC#bash: "seq (1) es un comando externo altamente no estándar que se usa para contar hasta 10 en absurdos howtos de Linux". – TheBonsai

Cuestiones relacionadas