Kann mir jemand erklären, warum eine Zahl mit einer führenden 0 dieses lustige Verhalten hervorruft?
#!/bin/bash
NUM=016
SUM=$((NUM + 1))
echo "$NUM + 1 = $SUM"
Druckt:
016 + 1 = 15
echo $((016))
Kann mir jemand erklären, warum eine Zahl mit einer führenden 0 dieses lustige Verhalten hervorruft?
#!/bin/bash
NUM=016
SUM=$((NUM + 1))
echo "$NUM + 1 = $SUM"
Druckt:
016 + 1 = 15
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 wie 8#16
. Wenn Sie die führende Null behalten möchten, müssen Sie 10#016
.
> num=016
> echo $((num))
14
> echo $((10#$num))
16
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.