Pourquoi bash pense-t-il que le nombre 010 = 8?
x=010
echo $x
010
echo $(( x+0 ))
8
echo $(( x-2 ))
6
Je pensais que cela pourrait être binaire, mais 010 = 10 = 2. Alors pourquoi obtient-il 8 et comment puis-je le faire penser 010 = 10 (et 010 - 2 = 8)?
0
dit qu'il est octal. Si vous venez de le faire,x=10
alors çaecho $((x+0))
se voit10
. De plus, il n'y a pas besoin de supplément$
avec()
.010
signifie 8 car en mettant un0
devant signifie octal, semblable à la façon dont mettre0x
dans certaines langues signifie hex.0
déclenche octal,0x
hex et0b
binaire.Réponses:
Les séquences de nombres commençant par a
0
sont interprétées comme des nombres octaux.Octal
10
= décimal8
.Pour que bash le traite comme un nombre décimal, supprimez le premier zéro ou forcez la décimale avec:
Généralement, cela fonctionne pour toutes les bases, remplacez simplement le
10
par la base que vous souhaitez:la source
:-
dans mon commentaire ci-dessus aurait dû être:-0
}