2009-06-08 1 views

risposta

131

farei

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

(anche se, ovviamente seq 0 2 10 produrrà la stessa uscita da sola).

Si noti che seq consente numeri in virgola mobile (ad esempio, seq .5 .25 3.5) ma l'espansione di parentesi graffe di bash consente solo numeri interi.

+1

Mi azzardo a indovinare che il downvote è dovuto alla risposta generica a "sh" e non specifica a "bash". L'approccio di Bash puro {begin end step} si comporta solo un po 'meglio. Il vecchio metodo "seq" è comodo su sistemi di memoria più vecchi o più piccoli come busybox. Ho fatto inversione della risposta sia tua che di TheBonsai. :) –

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

seq è un comando di Linux. Questo non sarà disponibile su Mac OS X o FreeBSD. – Dereckson

+3

FWIW seq è disponibile nel mio OS X Mavericks standard 10.9.1 –

+0

Ho provato qualche altra sintassi, ma è l'unico che funziona per il mio su un piccolo CentOS. @z - ha salvato la mia giornata: D – erm3nda

44

Bash puro, senza un processo in più:

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

+1 Perché il passo può essere sostituito anche da una variabile. –

70

Bash 4 espansione delle parentesi graffe 's ha una caratteristica passo:

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

Non importa se Bash 2/3 (C-style for loop, vedere le risposte sopra) o Bash 4, preferirei qualcosa oltre il comando 'seq'.

+1

potresti spiegare perché? – SilentGhost

+0

e btw, sai se bash4 è l'impostazione predefinita su qualsiasi SO principale? – SilentGhost

+2

Bash4 non è ancora mainstream, no. Perché non seq? Bene, diciamo con le parole del bot nel canale IRC#bash: "seq (1) è un comando esterno altamente non standard utilizzato per contare fino a 10 in stupidi howtos Linux." – TheBonsai