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
-eq
operador del comando de prueba :No solo funciona
bash
sino 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
OPTIND
También es bueno aquí. solo saiyan.fuente