2009-06-08 8 views

Odpowiedz

131

zrobiłbym

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

(choć oczywiście seq 0 2 10 przyniesie taki sam efekt na własną rękę).

Należy zauważyć, że seq zezwala na liczby zmiennoprzecinkowe (np. seq .5 .25 3.5), ale rozszerzenie klamrowe basha pozwala tylko na liczby całkowite.

+1

Spróbuję zgadywać, że ostateczna decyzja była spowodowana tym, że twoja odpowiedź jest generyczna dla "sh", a nie specyficzna dla "bash". Podejście czystego Basha {początek końca kroku} działa nieco lepiej. Starsza metoda "seq" jest przydatna w starszych lub mniejszych systemach pamięciowych, takich jak busybox. Zrobiłem odpowiedź zarówno twoją, jak i TheBonsai. :) –

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

seq to polecenie systemu Linux. To nie będzie dostępne w Mac OS X lub FreeBSD. – Dereckson

+3

FWIW seq jest dostępny w moim standardowym OS X Mavericks 10.9.1 –

+0

Mam spróbować innych sintax, ale to jest tylko działa dla mojego na małym CentOS. @z - zapisał mój dzień: D – erm3nda

44

Czysty atakujących, bez dodatkowego procesu:

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

+1 Ponieważ krok można również zastąpić zmienną. –

70

atakujących 4 jest ekspansja klamra posiada funkcję kroków:

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

niezależnie od tego czy atakujących 2/3 (W stylu C dla pętli, patrz odpowiedzi powyżej) lub Bash 4, wolałbym cokolwiek nad poleceniem "seq".

+1

możesz wyjaśnić, dlaczego? – SilentGhost

+0

i btw, czy wiesz, czy bash4 jest domyślny na każdym większym systemie operacyjnym? – SilentGhost

+2

Bash4 nadal nie jest głównym nurtem, nie. Dlaczego nie seq? Cóż, powiedzmy to słowami bota na kanale IRC#bash: "seq (1) jest wysoce niestandardowym poleceniem zewnętrznym używanym do liczenia do 10 w głupich poradnikach Linuksa." – TheBonsai

Powiązane problemy