Estoy tratando de verificar si una entrada es un número entero y la he revisado cientos de veces, pero no veo el error en esto. Por desgracia, no funciona, activa la instrucción if para todas las entradas (números / letras)
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
He jugado con las citas, pero o me lo perdí o no hizo nada. ¿Qué hago mal? ¿Hay una manera más fácil de probar si una entrada es solo un INTEGER?
bash
regular-expression
quoting
test
lonewarrior556
fuente
fuente

scale='^[0-9]+$'; [[ "$scale" == "^[0-9]+$" ]] && echo equal || echo "not equal"Usar
-eqoperador del comando de prueba :No solo funciona
bashsino también en cualquier shell POSIX. De la documentación de prueba POSIX :fuente
[[lugar de una prueba anterior[como la mía.Para enteros sin signo utilizo:
Pruebas:
fuente
Como el OP parece querer solo enteros positivos:
Ejemplos:
Tenga en cuenta que
[se requiere una sola prueba:Esto se debe a que la desreferenciación ocurre con
[[:fuente
Eso hace la verificación y genera su error.
fuente
OPTINDTambién es bueno aquí. solo saiyan.fuente