Bonjour les gens, soit un bash sur un solaris, grep -i pattern <fichier> if [ ! $? ]; then echo trouvé fi en -x : + '[' '!' 0 ']' Et pourtant mon if n'est pas "exécuté", alors que [[ $? == 0 ]] fonctionne j'aurais loupé quelque chose sur l'utilisation du ! ?! a+ -- http://asyd.net/home/ - Home Page http://guses.org/home/ - French Speaking (Open)Solaris User Group
On Dec 17, 2007 2:25 PM, Bruno Bonfils <asyd@asyd.net> wrote:
Bonjour les gens,
soit un bash sur un solaris,
grep -i pattern <fichier>
if [ ! $? ]; then echo trouvé fi
en -x :
+ '[' '!' 0 ']'
Et pourtant mon if n'est pas "exécuté", alors que [[ $? == 0 ]] fonctionne
j'aurais loupé quelque chose sur l'utilisation du ! ?!
jems@jems-laptop:~$ test 0 && echo "vrai" vrai jems@jems-laptop:~$ test 1 && echo "vrai" vrai jems@jems-laptop:~$ test -1 && echo "vrai" vrai extrait du man builtins : test expr [ expr ] Return a status of 0 or 1 depending on the evaluation of the conditional expression expr. test évalue une expression (donc pas une valeur) d'où le fait que ca fonctionne dans ton deuxième exemple. Ceci étant, je ne sais pas pourquoi dans ce cas précis tu ne testes pas directement le retour de grep ? if ! grep -i pattern <fichier>; then fi Jeremy
On 2007-12-17 14:25:57 +0100, Bruno Bonfils wrote:
if [ ! $? ]; then echo trouvé fi
en -x :
+ '[' '!' 0 ']'
Et pourtant mon if n'est pas "exécuté", alors que [[ $? == 0 ]] fonctionne
Le '!' ne fonctionne pas comme cela. Il inverse le résultat du test. Comme "test 0" est vrai (car '0' n'est pas la chaîne vide), ça donne faux. Il faut utiliser [ $? -eq 0 ] ou [ $? -ne 0 ] suivant les cas. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
participants (3)
-
Bruno Bonfils
-
Jeremy Monnet
-
Vincent Lefevre