Si j'écris ce qui suit dans un terminal bash:
A="0012"
B=$((A+1))
echo $B
J'en reçois 11, pas 13 comme je m'y attendais !!!!!
J'ai cherché sur Google et je ne peux pas l'expliquer du tout, ou trouver comment je peux augmenter le nombre. (Je veux en fait finir avec B = "0013" et incrémenter une fois à chaque fois que j'utilise ceci comme préfixe pour mes sauvegardes)
Réponses:
C'est parce que les nombres commençant par
0
sont traités comme Octal parbash
, donc il fait un ajout Octal (Base 8). Pour obtenir un ajout décimal pour cette structure, vous devez définir explicitement la base ou ne pas utiliser00
complètement.Pour Decimal, la base est 10, dénotée par
10#
:la source
Vous pouvez essayer cette commande pour obtenir la réponse:
Vous trouverez plus d'informations sur la
bc
commande ici .bc
page de manuel:la source
echo
et un canal, vous pouvez utiliser la syntaxe "ici chaîne" de Bash. L'effet est le même, mais à mon humble avis la "chaîne ici" est plus belle:bc <<< "$A + 1"
:-)bc
commande en plus d'unhere
lien serait utile.Une autre méthode peut consister à conserver vos variables sous forme d'entiers et à les convertir en chaîne à la fin:
Ce style de travail avec des entiers en mathématiques et de conversion en chaîne pour la réponse est plus intuitif pour moi car je suis habitué à la programmation BASIC. J'apprécie que Bash n'ait pas de typage variable comme C et BASIC, mais prétendre qu'il le fait me rend heureux.
la source
A="0012"; A=$((10#$A))