[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: