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.

Etiquettes: