• [^] # Re: false

    Posté par . En réponse au journal Le core utile. Évalué à 2.

    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