De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 5 de junho de 2022
Veja só que interessante uma discussão que surgiu na lista das dicas-l no telegram (https://t.me/DicasL):
O problema era:
Como posso saber se uma variável Var é numérica ou não?
Foram apresentadas diversas soluções:
((Var + 0)) &>- && echo Numérico
Fazendo assim, se $Var
não fosse numérica o comando seria mal
sucedido e a condição para o echo
não seria satisfeita.
case $Var in +([[:digit:]])) echo Numérico;; *) echo Não numérico esac
Aqui chamo a atenção para o uso de coringas estendidos (que se obtém com o
shopt -s extglob
), para obrigar que $Var
seja formada só por algarismos.
[[ $Var =~ ^[0-9]+$ ]] && echo Numérico
Nesta o colega aproveitou para usar Expressões Regulares.
[[ -z ${Var//[0-9]/} ]] && echo Numérico
Deixei essa para o fim porque achei a mais criativa e eficiente. O colega de
lista usou um comando test ([[ ... ]])
que executaria o echo
caso o resultado
da Expansão de Parâmetros para excluir todos os algarismos de $Var
resultasse
num conjunto vazio (-z
). Mas como eu disse um pouco antes, se não houver
o PARA
, o texto que casar com o DE
será excluído então a última barra (/
)
nem era necessária.
Essas foram as soluções que me lembro, mas devem ter havido outras. Isso demonstra como a programação em Shell pode ser criativa, pois sempre existem diversas formas de resolução para o mesmo problema.
Mas quero fazer uma observação sobre o item 1 acima, que pode passar
despercebida; se $Var
fosse igual a zero, o resultado seria errado porque
matematicamente, o zero é falso. Para resolver isso, o melhor seria usar
globbing estendido da seguinte forma:
[[ $Var == +(0) ]] || ((Var + 0)) && echo Numérico
Onde primeiramente testamos se $Var
é formada por um ou mais zeros.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários