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}
[^] # Re: false
Posté par benja . 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}