Re: cowsay et xcowsay
Le lundi 25 mars 2013 à 08:35:44, Pierre Malard a écrit :
>[…]
> > C’est un bugue ?
>
> En tout cas, ça y ressemble...
Pas vraiment.
> Si on se réfère au "man test", le "-n" devrait renvoyer VRAI
> si la longueur de la variable n'est pas nul et le "-z" est
> le test inverse. Or, autant le "-z" fonctionne bien, autant
> le "-n" renvoie toujours VRAI !
D’abord, le man test ne parle pas de longueur de _variable_
mais de longueur de _chaîne_. $truc est l’expansion de la chaîne
contenue dans la variable truc. Si truc n’existe pas, c’est la
chaîne vide.
Ensuite, l’expansion des variables est toujours effectuée
_avant_ d’exécuter la commande.
Donc, quand tu écris :
test -n $truc
alors que truc n’existe pas ou est une chaîne vide, c’est
exactement comme si tu écrivais :
test -n
Ce qui est la même chose que :
test
Ce qui renvoie 0 (donc vrai).
En revanche, si tu écris :
test -z $truc
alors que truc n’existe pas ou est une chaîne vide, c’est comme
si tu écrivais :
test -z
Et, ça, c’est considéré comme faux parce que c’est le contraire
de
test -n
Moralité, quand on veut tester une _chaîne_, on s’assure qu’il
y a une _chaîne_ à tester. Donc on encadre avec des "" ou on
précède d’une chaîne fixe (souvent 'x' ; le préfixe permet aussi
d’éviter un « Bobby Tables »).
C’est très important, surtout avec test, sinon on se prend
souvent des erreurs de syntaxe (essayer 'test $truc = 2' quand
truc n’existe pas ou est vide).
--
Sylvain Sauvage
Reply to: