Dieses wirklich einfache Script sollte simpel bei ungeraden Wochen abbrechen – nur an genau zwei Wochen des Jahres funktioniert das nicht. Findest du heraus warum?
Hier das Script:
#!/bin/bash week=$(date +%V) if [ $(($week % 2)) != 0 ] then exit fi
Lösung gibts weiter unten, erst rätseln dann spicken 🙂
Lösung:
Das Script bringt an den Wochen 8 und 9 des Jahres den folgenden Fehler:
-bash: 09: value too great for base (error token is "09")
Der Grund:
date() gibt alle Datumswerte (auch die Woche) mit führenden 0en zurück. Bei der Ausgabe eines Datums ist das ja auch erwünscht und spart Arbeit.
Nur wenn man mit der Ausgabe rechnen will muss man wissen dass die Bash Zahlen mit führenden 0en als Oktal interpretiert.
Das macht die ersten 7 Wochen im Jahr nichts aus denn, oktal 1 bis 7 ist gleich dezimal 1 bis 7. Ab der 10. Woche fügt date() auch keine führende 0 mehr an und die Bash rechnet nun (wie erwartet) mit dem dezimalen System. Nur die Woche 08 und 09 sind im oktalen Zahlensystem nicht gültig. Deswegen wirft das Script einen Fehler!
Wer sich jetzt frägt warum dieser Beitrag in der Woche 9 des Jahres 2018 veröffentlicht wurde: Ja, uns ist dieser Fehler erst jetzt aufgefallen!
Schreibe einen Kommentar