Psst: printf "%03d\n" 10ist in bash vollständig verwendbar, um eine führende Null für Dateinamen und dergleichen zu erhalten.
Squeezy
@Squeezy Danke, aber dieser Teil hat bereits funktioniert. Das eigentliche Problem bestand darin, keinen Dateinamen mit einer führenden 0 zu erhalten. Es wurde herausgefunden, welcher Dateiname die höchste Nummer hat, und dann die nächste in Folge mit printf "prefix-% 03d.tif" $ SUM erstellt.
DeltaLima
8
Beachten Sie, dass Sie dies selbst herausgefunden haben könnten, indem Sieecho $((016))
Mehrdad
2
Zu Ihrer Information, dies gilt für viele Programmiersprachen: C, C ++, Javascript.
Paul Draper
Antworten:
128
Das Missverständnis ist, dass die Zahlen nicht bedeuten, was Sie erwarten.
Eine führende Null bezeichnet eine Zahl mit der Basis 8. Dh 016ist dasselbe wie 8#16. Wenn Sie die führende Null behalten möchten, müssen Sie 10#016.
Es gibt 10 Arten von Menschen auf der Welt. Diejenigen, die das Binäre verstehen, die, die es nicht verstehen, die, die keinen Base-8-Witz erwartet haben, und 5 andere Arten von Leuten.
Jon Story
42
Weil:
~$ echo $((NUM))14
Wenn die Zahl mit 0 beginnt, wird sie als Oktalwert betrachtet und 16 in Oktal ist 14 in Dezimalzahl.
printf "%03d\n" 10
ist in bash vollständig verwendbar, um eine führende Null für Dateinamen und dergleichen zu erhalten.echo $((016))
Antworten:
Das Missverständnis ist, dass die Zahlen nicht bedeuten, was Sie erwarten.
Eine führende Null bezeichnet eine Zahl mit der Basis 8. Dh
016
ist dasselbe wie8#16
. Wenn Sie die führende Null behalten möchten, müssen Sie10#016
.quelle
Weil:
Wenn die Zahl mit 0 beginnt, wird sie als Oktalwert betrachtet und 16 in Oktal ist 14 in Dezimalzahl.
quelle