2009-06-08 8 views
85

Die Art und Weise in einer Reihe schlag zu iterieren istWie man Bereich mit Schritt n im Bash produziert? (Eine Folge von Zahlen mit Inkrementen erzeugen)

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

Was mit einem Schritt die Syntax für Iterieren über die Folge wäre? Sprich, ich möchte im obigen Beispiel nur eine gerade Zahl bekommen.

+0

Gerade Zahlen, multipliziere ich mit 2.: P –

+0

Multiplikation ist ziemlich hässlich, sollte ich sagen – SilentGhost

+0

große Frage! –

Antwort

131

würde ich

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

tun (obwohl natürlich seq 0 2 10 wird die gleiche Leistung auf eigene produzieren).

Beachten Sie, dass seq Fließkommazahlen (z. B. seq .5 .25 3.5) ermöglicht, aber Bashs Klammererweiterung ermöglicht nur Ganzzahlen.

+1

Ich vermute, dass der Downvote darauf zurückzuführen ist, dass Ihre Antwort generisch für "sh" ist und nicht spezifisch für "bash". Der pure Bash-Ansatz {begin end step} führt nur etwas besser aus. Die ältere seq-Methode ist auf älteren oder kleineren Speichersystemen wie busybox praktisch. Ich habe sowohl Ihre Antwort als auch die Antwort von TheBonsai verbessert. :) –

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

Seq ist ein Linux-Befehl. Dies ist unter Mac OS X oder FreeBSD nicht verfügbar. – Dereckson

+3

FWIW Seq ist in meinem Standard OS X Mavericks 10.9.1 –

+0

Ich habe versucht, einige andere sintax, aber das ist das einzige funktioniert für meine auf einem kleinen CentOS. @z - hat meinen Tag gerettet: D – erm3nda

44

Reines Bash, ohne einen zusätzlichen Prozess:

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

+1 Weil der Schritt auch durch eine Variable ersetzt werden kann. –

70

Bash 4 ‚s Klammer Erweiterung hat einen Schritt Merkmal:

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

Egal ob Bash 2/3 (C-style for-Schleife, siehe Antworten oben) oder Bash 4, würde ich lieber alles über den 'Seq' Befehl.

+1

könnten Sie erklären warum? – SilentGhost

+0

und BTW, wissen Sie, ob Bash4 Standard auf jedem wichtigen Betriebssystem ist? – SilentGhost

+2

Bash4 ist immer noch nicht Mainstream, nein. Warum nicht Seq? Nun, lasst es uns mit den Worten des Bot im IRC-Kanal #bash sagen: "seq (1) ist ein sehr ungewöhnlicher externer Befehl, der in albernen Linux-Howtos auf 10 zählt." – TheBonsai

Verwandte Themen