• [^] # Re: false

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

    Là ou il faut faire bien attention avec ce crochet fermant, c'est de bien mettre une espace avant. Pour éviter le bug suivant: [ "$x" = "$y" -a "$w" = "$z"] . La comparaison de chaîne est à ce titre plus piégeuse car la deuxième condition sera silencieusement toujours fausse (sauf si effectivement on s'attend à ce que $w puisse valoir "$z]"...); par rapport à la comparaison numérique qui va déclencher une erreur de conversion. Du coup, je préfère aussi utiliser backquote test et aussi parce que c'est plus "parlant" :)
    Btw l'opérateur == est un bashisme totalement inutile, bref à ne pas utiliser.

    Pour le coup des && et || je suis plus partagé. Je n'arrive pas à produire d'exemple mais j'ai le souvenir qu'il y a des situations qui ne sont pas exprimables. Pour les cas simples ok. Il y a aussi l'idiome 'commande qui peut rater sans devoir tout faire exploser || true' utilisé dans un script en "set -e" qui est très pratique.

    À part ça, on voit aussi de temps en temps ':' à la place de true... ça fait gagner des caractères... :)
    Son autre utilité, c'est pour utiliser l'opérateur : ${var:=defaultvalue}, bien plus concis que d'écrire var=${var:-default}.
    Pour rebondir sur l'exemple parent de ce thread:

    case .. in
    -bz) COMPRESS=bzip2 ;;
    -gz) COMPRESS=gzip;;
    esac
    ${COMPRESS:+:} ${COMPRESS:-exit 1}