
Auf meinem lokalen Rechner, auf dem ich CentOS 7.2 ausführe, mache ich Folgendes:
for i in {8..12}; do echo ${i}; done
Ich habe:
8
9
10
Aber wenn ich das mache:
for i in {08..10}; do echo ${i}; done
Ich habe:
08
09
10
Aber auf dem Server, auf den ich Zugriff habe und auf dem CentOS 5.6 läuft, führt die Ausführung beider Befehle zur gleichen Ausgabe:
8
9
10
Warum stehen vor 8 und 9 keine Nullen? Liegt das an der Bash-Version oder nur an der Umgebungskonfiguration? Kann ich das pro Sitzung oder dauerhaft ändern, sodass mein Server diese Null vor Zahlen kleiner als 10 setzt?
Antwort1
Es ist wahrscheinlich, dass bash
auf Ihrem CentOS 5.6-Computer Version 3 vorhanden ist. Das Auffüllen von Ganzzahlen mit Nullen in Klammererweiterungen wurde in Version 4 von eingeführt bash
.
Die Lösung wäre entweder, Ihre Installation bash
auf eine neuere Version zu aktualisieren oder eine alternative Methode zum Generieren der mit Nullen aufgefüllten Ganzzahlen zu verwenden, wie
printf '%02d\n' {8..10}
Alternativ etwas in der Art von
for i in 0{1..9} {10..20}; do
echo "$i"
done
wird auch funktionieren.
Antwort2
Anstatt zu verwenden bash
, können Sie verwenden, zsh
woher diese Syntax stammt.
zsh
wird {08..10}
seit 1995 unterstützt (eingeführt in 2.6-beta4) und ist daher in zsh
jeder Version von CentOS verfügbar (erste Version von CentOS im Jahr 2004).
zsh
Sie haben in Ihrem Beispiel tatsächlich die Syntax verwendet , dass Sie anstelle von bash
benötigen , damit die Erweiterung von nicht der Worttrennung unterliegt (und somit von abhängig ist ).echo "${i}"
echo ${i}
$i
$IFS
Antwort3
Alternativ können Sie seq
den Befehl
$ seq -f "%02g" 8 10
08
09
10