Se eu escrever o seguinte em um terminal bash:
A="0012"
B=$((A+1))
echo $B
Eu recebo 11, não 13 como eu esperava !!!!!
Pesquisei no Google e não consigo explicar nada ou descobrir como posso aumentar o número. (Na verdade, eu quero terminar com B = "0013" e incrementar um a cada vez, pois estou usando isso como prefixo dos meus backups)
Respostas:
Isso ocorre porque os números que começam com
0
são tratados como Octal porbash
, portanto, estão fazendo adição Octal (Base 8). Para obter adição decimal para essa estrutura, você precisa definir explicitamente a Base ou não usá-la00
completamente.Para decimal, a base é 10, denotada por
10#
:fonte
Você pode tentar este comando para obter a resposta:
Mais informações sobre o
bc
comando podem ser encontradas aqui .bc
página de manual:fonte
echo
um canal, você pode usar a sintaxe "here string" do Bash. O efeito é o mesmo, mas IMHO a "string aqui" é mais bonita:bc <<< "$A + 1"
:-)bc
comando, além de umhere
link, seria útil.Um método alternativo pode ser manter suas variáveis como números inteiros e convertê-las em uma sequência no final:
Esse estilo de trabalhar com números inteiros em matemática e converter em string para a resposta é mais intuitivo para mim, pois estou acostumado à programação BASIC. Aprecio que o Bash não tem digitação variável como C e BASIC, mas fingir que me faz feliz.
fonte
A="0012"; A=$((10#$A))