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.