Estou tentando verificar se uma entrada é um número inteiro e já repassei centenas de vezes, mas não vejo o erro nisso. Infelizmente, ele não funciona, ele dispara a instrução if para todas as entradas (números / letras)
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
Eu brinquei com as aspas, mas perdi ou não fez nada. O que eu faço de errado? Existe uma maneira mais fácil de testar se uma entrada é apenas um INTEGER?
bash
regular-expression
quoting
test
lonewarrior556
fonte
fonte
scale='^[0-9]+$'; [[ "$scale" == "^[0-9]+$" ]] && echo equal || echo "not equal"
Use o
-eq
operador do comando test :Ele não apenas funciona,
bash
mas também qualquer shell POSIX. Da documentação de teste POSIX :fonte
[[
vez de teste antigo[
como o meu.Para números inteiros não assinados, eu uso:
Testes:
fonte
Como o OP parece querer apenas números inteiros positivos:
Exemplos:
Observe que
[
é necessário um único teste:Isso ocorre porque a desreferenciação ocorre com
[[
:fonte
Isso faz a verificação e gera seu erro.
fonte
OPTIND
aqui é bom também. apenas saiyan.fonte