Bash for-Schleife mit Bereich {# .. #}

17

Die {# .. #} erzeugen eine Folge von Zahlen oder Zeichen, ähnlich wie range () in Python. Wenn ich den Befehl echo {1..5}in der Befehlszeile ausführe , habe ich:

1 2 3 4 5

Stattdessen funktioniert das folgende Bash-Skript nicht wie erwartet.

for i in {1..3};
do
    echo "Iteration $i"
done

wird drucken:

Iteration {1..3}

Warum?
* Ich könnte es gebrauchen, seqaber ich habe gelesen, dass es veraltet ist ( http://www.cyberciti.biz/faq/bash-for-loop/ )

Shake0
quelle
Dieser Fehler tritt auf, wenn das Skript mit dem Befehl "sh" ausgeführt wird (versuchen Sie es mit "bash").
Shake0

Antworten:

22

Ich habe Ihren Code ausprobiert (Kopieren und Einfügen in ein Terminal) und er ergab ein anderes Ergebnis als das, was Sie gepostet haben:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

Ich benutze Linux Mint 12 Lisa (abgeleitet von Ubuntu) mit der Bash-Version 4.2.10 (1)

zipizap
quelle
2
Sie haben Recht! Ich dachte, sh und bash waren das gleiche.
Shake0
1
nein, bash und sh sind ziemlich unterschiedlich ... bash ist fähiger als sh, es wurde auf den Schultern von sh gemacht :) obwohl beide einen guten Grad an Kompatibilität haben, haben sie auch ihre Unterschiede
zipizap 12.12.13
Beachten Sie, dass Sie verschachtelte Listen wie für var in {{i..j}, {l..m}} erstellen können. Geben Sie $ var als Echo aus, wenn Sie eine unregelmäßige Reihenfolge benötigen, z. B. 1 2 3 7 8 9
brown.2179
Beachten Sie, dass einige Distributionen /bin/shtatsächlich auf bash zeigen, unter Debian und Ubuntu jedoch in der Regel auf /bin/dashPOSIX-kompatible, aber nicht die gleiche Syntax wie Bash unterstützende.
dragon788