Re: bash : test d'une chaine avec que des " "

Page principale

Répondre à ce message
Auteur: jeanluc
Date:  
À: Liste Guilde
Sujet: Re: bash : test d'une chaine avec que des " "
> | ./ann-pgm1: test: ss: integer expression expected
> |  non ok toe le
>
> Dans les 2 cas, j'ai la bonne réponse....
> Dans le deuxième cas, il y a une alerte... pas grave, je sais que ma zone a
> autre chose que des blancs!


oui, mais c'est pas trop une bonne idee de laisser une "alerte"
meme si ca marche.


> > if test "$toe" -le "  "; [...]
> > ./ann-pgm1: test: ss: integer expression expected
>
> Comme dirait man bash, -le est un opérateur arithmétique. Il sert à
> comparer des entiers.


Comme indique, " $a -le $b " sert a comparer un nombre $a avec $b
or, d'apres les indications :
    too="   "
    toe="ss"
ce ne sont pas des nombres, donc, continuer a utiliser une comparaison
de nombre n'est pas une bonne idee,
donc, il faut utiliser une comparaison de chaines.


Neanmoins, c'est vrai que
 toe="  "            # y'a 2 espaces
 if [  "$toe" == "   " ];        # y'a 3 espaces
 then
     echo "ok: toe le"
 else
     echo " non ok toe le"
 fi
retourne " non ok toe le" parce que le nombre d'espaces est
pris en compte, et pour que la comparaison soit vraie, il faut que
$toe soit egal a "   " (3 espaces exactement ...).


Donc, pour que ca marche quelque soit le nombre d'espaces,
une solution est d'enlever les guillemets :

 toe="  "            # y'a 2 espaces
 if [  x$toe == x  ];        # pour le coup, x est vraiment indispensable
 then
     echo "ok: que des espaces ou bien toe est vide"
 else
     echo " non ok toe"
 fi


par contre, si toe="aa bb", alors, il va y avoir une "alerte" (voir mail
precedent)
a toi de voir si ca peut se produire... si, oui, prendre des mesures pour
l'eviter.


Jean-Luc.