se livrando dos leading zeroes [bash]
Escrito por meleu em 18 Aug 2018TL;DR: aprendi aqui uma maneira bacana de fazer variáveis automaticamente descartarem os “leading zeroes” no bash:
var=000666
echo $(( 10#$var ))
# saída experada: 666
Num dos meus scripts eu precisava saber se a hora atual é menor que dezoito horas. Tipo isso:
hour=$(date +%H)
if [[ $hour -gt 18 ]]; then
echo "do something..."
fi
Ao executar eu me deparei com o seguinte erro:
-bash: [[: 08: valor muito grande para esta base de numeração (token de erro é "08")
Dei umas googlada e achei a solução: $(( ))
. Portanto meu (trecho de) código ficou assim:
hour=$(date +%H)
hour=$(( 10#$hour )) # também poderia ser "$(( 10#$(date +%H) ))"
if [[ $hour -gt 18 ]]; then
echo "do something..."
fi
EDIT
facepalm
Um amigo me alertou que para o meu propósito específico acima (pegar a hora sem o zero a esquerda) bastava eu usar date +%-H
. Daí fui olhar na man page e achei isso:
By default, date pads numeric fields with zeroes. The following
optional flags may follow '%':
- (hyphen) do not pad the field
Bem mais simples, né?