Zahlenfolgen mit führenden Nullen in bash

Die beschriebene Funktionalität ist in bash 4.0 und höher verfügbar. Diese Informationsseite ist daher veraltet.

Beschreibung

Bei der sogenannten brace expansion wandelt bash eine Sequenzangabe in eine Folge von Zahlen um. Betrachten Sie den folgenden Befehl:

wget -x http://some.really.long/url/prefix/{,{000..123}.{html,jpg}}

Man würde intuitiv erwarten, dass er die folgenden Dateien herunterläd:

Das ist jedoch nicht die Art, wie die derzeitige Version von bash (3.2) diesen Befehl auffasst. Statdessen entfernt bash die führenden Nullen, so dass statt dessen Dateien wie 0.html herunterzuladen versucht werden. Mein Patch greift dieses Problem auf und bewirkt, dass bash das tut, was man intuitiv erwarten würde.

Viele Leute haben mich darauf hingewiesen, dass es möglich ist, Zahlenfolgen mit führenden Nullen auch durch andere Befehle wie seq -f %03.0f 0 123 oder printf '%03d ' {0..123} zu erzeugen. Um sie in dem oben angegebenen Beispiel verwenden zu können, ist jedoch ein Schleifenkonstrukt nötig. Die Schreibweise mit den geschweiften Klammern ist kompakter, intuitiver und fügt sich besser in die Aufteilung der Befehlszeile in einzelne Wörter ein.

Einige andere Scrip-Sprachen stellen auch Konstrukte zur Verfügung, mit denen Folgen unter Beibehaltung führender Nullen erzeugt werden können. Perl beispielsweise beherrscht dies.

Download

Sie können einen Patch herunterladen und auf den Quelltext von bash anwenden. Sie müssen bash dann von Hand übersetzen.

Kompatibilität

Der Patch verändert das Verhalten von bash in bestimmten Situationen, weshalb Skripten, die auf das eine oder andere Verhalten angewiesen sind, auf dem jeweils anderen System nicht korrekt funktionieren werden. Mir ist bisher noch kein plausibles Szenario eingefallen, bei dem ein Script sich auf das Entfernen führender Nuller durch bash verlassen müsste. Ich kann dennoch nichts versprechen, also verklagen Sie mich nicht, wenn durch den Patch irgendwas kaputt geht.

Referenzen

Ich habe versucht, die Verantwortlichen für diesen Patch zu begeistern, allerdings zunächst ohne Erfolg. Ich habe praktisch keine Reaktion bekommen auf meine Mitteilungen. Verschiedene Archive listen meine Postings als drei unterschiedliche Threads auf.

Posting: Erstes Wiederholung Diskussion
Google Groups 8fd6f6111936c52d
Gmane 10453 10454 10464
Mail Archive 03105 03106 03116
GNU Mail Archives 2007-08:00105 2007-08:00106 2007-09:00007

Auf eine weitere Mail direkt an den Bash Maintainer, Chet Ramey, habe ich dann erfahren, dass er für die nächste Veröffentlichung von Bash ein entsprechendes Feature in Erwägung zieht. Das war am 7. Januar 2008.

Mit Version 4.0 wurde das Feature tatsächlich veröffentlicht. Die Implementierung entspricht ziemlich dem hier angegebenen Patch.