| von Gagern » Martin » Patches » | Zahlenfolgen mit führenden Nullen |
|
Die beschriebene Funktionalität ist in bash 4.0 und höher verfügbar. Diese Informationsseite ist daher veraltet.
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.
Sie können einen Patch herunterladen und auf den Quelltext von bash anwenden. Sie müssen bash dann von Hand übersetzen.
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.
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.