J'essaie de vérifier si une entrée est un entier et je l'ai parcouru cent fois, mais je ne vois pas l'erreur ici. Hélas, cela ne fonctionne pas, il déclenche l'instruction if pour toutes les entrées (chiffres / lettres)
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
J'ai joué avec les citations mais soit je l'ai raté, soit ça n'a rien fait. Qu'est-ce que je fais mal? Existe-t-il un moyen plus simple de tester si une entrée n'est qu'un INTEGER?
bash
regular-expression
quoting
test
lonewarrior556
la source
la source
scale='^[0-9]+$'; [[ "$scale" == "^[0-9]+$" ]] && echo equal || echo "not equal"
Utilisez l'
-eq
opérateur de la commande de test :Il fonctionne non seulement dans
bash
mais aussi dans n'importe quel shell POSIX. De la documentation de test POSIX :la source
[[
au lieu de l'ancien test[
comme le mien.Pour les entiers non signés, j'utilise:
Tests:
la source
Comme l'OP ne semble vouloir que des entiers positifs:
Exemples:
Notez qu'un seul
[
test est requis:En effet, le déréférencement se produit avec
[[
:la source
Cela vérifie et génère votre erreur.
la source
OPTIND
est bon ici aussi. juste saiyan.la source