Qualcuno può spiegarmi perché un numero con uno 0 iniziale dà questo comportamento divertente?
#!/bin/bash
NUM=016
SUM=$((NUM + 1))
echo "$NUM + 1 = $SUM"
Stampa:
016 + 1 = 15
echo $((016))
Qualcuno può spiegarmi perché un numero con uno 0 iniziale dà questo comportamento divertente?
#!/bin/bash
NUM=016
SUM=$((NUM + 1))
echo "$NUM + 1 = $SUM"
Stampa:
016 + 1 = 15
echo $((016))
Risposte:
L'incomprensione è che i numeri non significano ciò che ti aspetti.
Uno zero iniziale indica un numero con base 8. Ie 016
è lo stesso di 8#16
. Se si desidera mantenere lo zero iniziale, è necessario 10#016
.
> num=016
> echo $((num))
14
> echo $((10#$num))
16
Perché:
~$ echo $((NUM))
14
se il numero inizia con 0, viene considerato un valore ottale e 16 in ottale è 14 in decimale.
printf "%03d\n" 10
è completamente utilizzabile in bash per ottenere uno zero iniziale per nomi di file e simili.