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
0son 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 por00completo.Para Decimal, la Base es 10, denotada por
10#:fuente
Puede probar este comando para obtener la respuesta:
Más información sobre el
bccomando se puede encontrar aquí .bcpágina man:fuente
echoy 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":-)bcuna introducción de una o dos oraciones del comando además de unhereenlace.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))