Si escribo lo siguiente en un terminal bash:
A="0012"
B=$((A+1))
echo $B
¡Obtuve 11, no 13 como esperaba!
He buscado en Google y no puedo explicarlo en absoluto, o averiguar cómo puedo aumentar el número. (De hecho, quiero terminar con B = "0013" e incrementar uno cada vez, ya que estoy usando esto como prefijo para mis copias de seguridad)
Respuestas:
Esto se debe a que los números que comienzan con
0
son tratados como Octalbash
, por lo tanto, está haciendo la adición de Octal (Base 8). Para obtener una adición decimal para esta estructura, debe definir explícitamente la Base o no usarla por00
completo.Para Decimal, la Base es 10, denotada por
10#
:fuente
Puede probar este comando para obtener la respuesta:
Más información sobre el
bc
comando se puede encontrar aquí .bc
página man:fuente
echo
y una tubería, puede usar la sintaxis "aquí cadena" de Bash. El efecto es el mismo, pero en mi humilde opinión la "cadena de aquí" es más hermosa:bc <<< "$A + 1"
:-)bc
una introducción de una o dos oraciones del comando además de unhere
enlace.Un método alternativo puede ser mantener sus variables como enteros y convertirlas en una cadena al final:
Este estilo de trabajar con enteros en matemáticas y convertir a cadenas para la respuesta es más intuitivo para mí, ya que estoy acostumbrado a la programación BÁSICA. Aprecio que Bash no tenga una escritura variable como C y BASIC, pero pretender que sí me hace feliz.
fuente
A="0012"; A=$((10#$A))