Quelqu'un peut-il m'expliquer pourquoi un nombre avec un 0 mène à ce comportement amusant?
#!/bin/bash
NUM=016
SUM=$((NUM + 1))
echo "$NUM + 1 = $SUM"
Imprimera:
016 + 1 = 15
echo $((016))
Quelqu'un peut-il m'expliquer pourquoi un nombre avec un 0 mène à ce comportement amusant?
#!/bin/bash
NUM=016
SUM=$((NUM + 1))
echo "$NUM + 1 = $SUM"
Imprimera:
016 + 1 = 15
echo $((016))
Réponses:
Le malentendu est que les chiffres ne veulent pas dire ce que vous attendez.
Un zéro au début indique un nombre de base 8. Ce 016
est le même que 8#16
. Si vous voulez conserver le zéro non significatif, il vous faut 10#016
.
> num=016
> echo $((num))
14
> echo $((10#$num))
16
Parce que:
~$ echo $((NUM))
14
si le nombre commence par 0, il est considéré comme une valeur octale et 16 en octal est 14 en décimal.
printf "%03d\n" 10
est complètement utilisable dans bash pour obtenir un zéro non significatif pour les noms de fichiers et autres.