test - integer expression expected
J'ai récemment été confronté à l'erreur "integer expression expected" lors d'un test de deux entiers dans un de mes scripts.
Après plusieurs tests, j'ai finalement compris d'où venait mon erreur.
La variable que je testais ne contenait pas que des chiffres.
Elle n'était donc pas reconnue comme un entier.
Un simple "echo" de ma variable ne faisait pas apparaître tous les caractères de celle-ci.
Pour m'en apercevoir, j'ai dû utiliser la commande "od".
Exemple :
Je vais générer volontairement une erreur au niveau du contenu de la variable à tester en y insérant un caractère spécifique.
$ a=$(echo -e "20\a")
$ echo $a
20
La commande "echo" ne fait pas apparaitre le caractère spécifique contenu dans ma variable.
Je test si ma variable est égale à 20 (par exemple).
$ test $a -eq 20
-bash: test: 20: integer expression expected
J'ai bien une erreur car effectivement ma variable ne peut pas être considérée comme un entier à cause du caractère spécifique qu'elle contient.
La preuve avec la commande "od -c" ...
$ echo -n $a | od -c
0000000 2 0 \a
... le caractère spécifique "\a" apparait bien.
En conclusion, penser à bien vérifier le contenu des variables avec la commande "od" pour voir si des caractères spécifiques ne s'y sont pas insérés.
Commentaires
Pi-air (non vérifié)
dim, 05/01/2020 - 02:27
Permalien
alternative de détection de caractères indésirables
echo @${variable_name}@
si vide la sortie sera
@@
les @ seront collés pour la mise en évidence des espaces, le cas échéant.
echo ${#variable_name}
donnera le nombre de caractères inclus dans
variable_name
ronan
lun, 20/01/2020 - 14:38
Permalien
Effectivement
mais dans le cas de mon exemple avec le caractère spécial "\a", celui-ci n'est pas détectable avec
echo @${variable_name}@
Par contre, la commande
echo ${#variable_name} renvoie bien 3 (toujours pour mon exemple).
Je traite de cette commande ici et là
Ajouter un commentaire