Der Weg, um über einen Bereich in Bash zu iterieren, ist
for i in {0..10}; do echo $i; done
Was wäre die Syntax für das Durchlaufen der Sequenz mit einem Schritt? Angenommen, ich möchte im obigen Beispiel nur eine gerade Zahl erhalten.
Der Weg, um über einen Bereich in Bash zu iterieren, ist
for i in {0..10}; do echo $i; done
Was wäre die Syntax für das Durchlaufen der Sequenz mit einem Schritt? Angenommen, ich möchte im obigen Beispiel nur eine gerade Zahl erhalten.
Antworten:
Ja, würde ich
for i in `seq 0 2 10`; do echo $i; done
(obwohl natürlich seq 0 2 10
die gleiche Ausgabe für sich alleine erzeugt wird).
Beachten Sie, seq
dass Gleitkommazahlen (z. B. seq .5 .25 3.5
) zulässig sind, die Klammererweiterung von bash jedoch nur Ganzzahlen zulässt.
Die Klammererweiterung von Bash 4 hat eine Schrittfunktion:
for {0..10..2}; do
..
done
Egal ob Bash 2/3 (C-Stil für Schleife, siehe Antworten oben) oder Bash 4, ich würde alles dem Befehl 'seq' vorziehen.
i
, können Sie dies nicht tun for {0..10..${i}}
. Es schlägt fehl.
Pure Bash, ohne zusätzlichen Prozess:
for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
echo $COUNTER
done
#!/bin/bash
for i in $(seq 1 2 10)
do
echo "skip by 2 value $i"
done
> seq 4
1
2
3
4
> seq 2 5
2
3
4
5
> seq 4 2 12
4
6
8
10
12
> seq -w 4 2 12
04
06
08
10
12
> seq -s, 4 2 12
4,6,8,10,12