shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] bash: 08: valor muito grande para esta base de numera


From: Arkanon
Subject: Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08")
Date: Tue, 11 Aug 2015 11:01:48 -0300

À
​s vezes não vale a pena tirar os zeros à esquerda, principalmente quando eles foram colocados.
Nesses casos, basta operar com as variáveis indicando explicitamente a base decimal, como o Tiago sugeriu:
$ a=11
$ b=209
$ echo $((a+b))
220

$ a=$(printf %04d 11) # 0011
$ b=$(printf %06d 209) # 000209
$ echo $((a+b))
bash: 000209: valor muito grande para esta base de numeração (token com erro é "000209")

$ echo $((10#$a+10#$b))
220
Em 11 de agosto de 2015 10:50, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:

Tem outra opção pra remover os zeros a esquerda:

$ echo $var
0008
$ shopt -s extglob #ativa o extended globbing
$ echo ${var##+(0)}
8
$ shopt -u extglob

On Tue, Aug 11, 2015 at 4:26 AM Tiago Peczenyj address@hidden [shell-script] <address@hidden> wrote:

Ja mencionaram o Octal. 

O q nao parece obvio é que este problema aparece em muitos lugares. A convenção de usar 0 na frente de octal e 0x na frente de hexa foi popularizada pelo C (tem 0b pra binario em alguns casos) e ainda hoje tem os seus usos (chmod é um caso).

Entretanto os problemas com 08 e 09 geralmente surgem quando vc le uma entrada de dados e não valida corretamente -ou tem uma mascara. Como pedir uma data e tentar interpretar como numero. O melhor nesses casos é adicionar isso aos seus testes.

Se o seu programa nao pode falhar, seja paranoico nas validaçoes e conversoes. Como forçar a base 10 nos numeros lidos.










--
(o_  @arkanon  (Twitter)     __o
//\   address@hidden   _`\<,
V_/_      www.lsd.org.br  (_)/(_)
---------------------------------

reply via email to

[Prev in Thread] Current Thread [Next in Thread]