Wie kann ich in Bash über einen Zahlenbereich iterieren, wenn der Bereich durch eine Variable vorgegeben ist?
Ich weiß, dass ich dies tun kann (in der Bash "Sequenzausdruck" genannt) Dokumentation ):
for i in {1..5}; do echo $i; done
Das ergibt:
1
2
3
4
5
Doch wie kann ich einen der Endpunkte des Bereichs durch eine Variable ersetzen? Das funktioniert nicht:
END=5
for i in {1..$END}; do echo $i; done
Welche Drucke:
{1..5}
41 Stimmen
Hallo zusammen, die Informationen und Tipps, die ich hier gelesen habe, sind alle sehr hilfreich. Ich denke, es ist am besten, die Verwendung von seq zu vermeiden. Der Grund dafür ist, dass einige Skripte portabel sein müssen und auf einer Vielzahl von Unix-Systemen laufen müssen, auf denen einige Befehle möglicherweise nicht vorhanden sind. Nur um ein Beispiel zu nennen: seq ist auf FreeBSD-Systemen standardmäßig nicht vorhanden.
2 Stimmen
Verwandte Themen: bash for-Schleife: ein Bereich von Zahlen y unix.stackexchange.com - Ist es in der Bash möglich, eine Integer-Variable in der Schleifensteuerung einer for-Schleife zu verwenden?
12 Stimmen
Ich weiß nicht mehr, seit welcher Version der Bash genau, aber dieser Befehl unterstützt auch abschließende Nullen. Was manchmal wirklich hilfreich ist. Befehl
for i in {01..10}; do echo $i; done
würde Zahlen ergeben wie01, 02, 03, ..., 10
.4 Stimmen
Für diejenigen, die wie ich nur über den Bereich der Indizes einer Array wäre die Bash-Methode:
myarray=('a' 'b' 'c'); for i in ${!myarray[@]}; do echo $i; done
(beachten Sie das Ausrufezeichen). Sie ist spezifischer als die ursprüngliche Frage, könnte aber hilfreich sein. Siehe Bash-Parameter-Erweiterungen1 Stimmen
Die Klammererweiterung wird auch für Ausdrücke verwendet wie
{jpg,png,gif}
was hier nicht direkt angesprochen wird, obwohl die Antwort identisch sein wird. Siehe Klammererweiterung mit Variable? [Duplikat] die als Duplikat dieses Dokuments gekennzeichnet ist.0 Stimmen
Freebsd scheint zu haben
seq
jetzt "in diesen Tagen" FWIW...0 Stimmen
Intenté
for i in {1..${END}}; do echo ${i}; done
. Dies funktioniert in der Terminal-Befehlszeile, aber nicht in einem SHELL-Skript, was mich verwirrt.1 Stimmen
@PhoenixMu, Sie können das Shell-Skript mit bash yourscript.sh statt mit sh yourscript.sh ausführen
0 Stimmen
@XinNiu Stimmt;