En m’y mettant j’ai eu un peu de mal avec la logique binaire... On a l’habitude de considérer que 1 représente vrai et 0 représente faux, or le code retour des programmes c’est 0 pour OK, par convention
Effectivement.
Mais justement en utilisant true et false, on conserve la logique :
$ perl -le '1 and print "ko"'
ko
$ perl -le '1 and print "ok"'
ok
$ true && echo ok
ok
$ false || echo ko
ko
Même si c'est vrai que c'est perturbant d'avoir false à 1 et true à 0. C'est généralement le contraire.
# false; echo $?
1
# true; echo $?
0
Mais adapté à un shell, c'est logique.
Dans tous les cas, le seul test intéressant, c'est nul ou non nul (on ne teste pas =1 pour vrai, on teste !=0).
Quand on lance un programme, ce qui nous intéresse c'est de savoir si oui ou non le programme s'est bien exécuté (une seule possibilité). Dans le cas contraire, il peut être intéressant de savoir ce qui a planté. Du coup on peut avoir différents codes retours pour différentes situations.
Donc c'est plus logique d'attribuer 0 à ok et !0 à toutes les situations non ok.
Si je fais un if (rm toto) et que la commande « plante » (parce que le fichier toto n’existe pas par exemple) ma condition sera fausse.
Je ne comprend pas.
$ if (rm test); then echo ok; fi
rm: cannot remove `test': No such file or directory
$ touch test; if (rm test); then echo ok; fi
ok
[^] # Re: false
Posté par liberté . En réponse au journal Le core utile. Évalué à 2.
Effectivement.
Mais justement en utilisant true et false, on conserve la logique :
Même si c'est vrai que c'est perturbant d'avoir false à 1 et true à 0. C'est généralement le contraire.
Mais adapté à un shell, c'est logique.
Dans tous les cas, le seul test intéressant, c'est nul ou non nul (on ne teste pas =1 pour vrai, on teste !=0).
Quand on lance un programme, ce qui nous intéresse c'est de savoir si oui ou non le programme s'est bien exécuté (une seule possibilité). Dans le cas contraire, il peut être intéressant de savoir ce qui a planté. Du coup on peut avoir différents codes retours pour différentes situations.
Donc c'est plus logique d'attribuer 0 à ok et !0 à toutes les situations non ok.
Je ne comprend pas.