Beim Erstellen eines Zahlenbereichs von 08 bis 10 in Bash ist vor einstelligen Zahlen keine 0 enthalten

Beim Erstellen eines Zahlenbereichs von 08 bis 10 in Bash ist vor einstelligen Zahlen keine 0 enthalten

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 bashauf 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 bashauf 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, zshwoher diese Syntax stammt.

zshwird {08..10}seit 1995 unterstützt (eingeführt in 2.6-beta4) und ist daher in zshjeder Version von CentOS verfügbar (erste Version von CentOS im Jahr 2004).

zshSie haben in Ihrem Beispiel tatsächlich die Syntax verwendet , dass Sie anstelle von bashbenö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 seqden Befehl

$ seq -f "%02g" 8 10
08
09
10

verwandte Informationen