Un aperçu booléen rapide pour Bash
La if
déclaration prend une commande comme argument (comme le font &&
, ||
etc.). Le code de résultat entier de la commande est interprété comme un booléen (0 / null = true, 1 / else = false).
L' test
instruction prend des opérateurs et des opérandes comme arguments et renvoie un code de résultat au même format que if
. Un alias de l' test
instruction est [
, qui est souvent utilisé avec if
pour effectuer des comparaisons plus complexes.
Les instructions true
et false
ne font rien et renvoient un code de résultat (0 et 1, respectivement). Ils peuvent donc être utilisés comme littéraux booléens dans Bash. Mais si vous placez les instructions dans un endroit où elles sont interprétées comme des chaînes, vous rencontrerez des problèmes. Dans ton cas:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
Alors:
if [ true ] ; then echo "This text will always appear." ; fi;
if [ false ] ; then echo "This text will always appear." ; fi;
if true ; then echo "This text will always appear." ; fi;
if false ; then echo "This text will never appear." ; fi;
Ceci est similaire à faire quelque chose comme echo '$foo'
contre echo "$foo"
.
Lors de l'utilisation de l' test
instruction, le résultat dépend des opérateurs utilisés.
if [ "$foo" = "$bar" ] # true if the string values of $foo and $bar are equal
if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal
if [ -f "$foo" ] # true if $foo is a file that exists (by path)
if [ "$foo" ] # true if $foo evaluates to a non-empty string
if foo # true if foo, as a command/subroutine,
# evaluates to true/success (returns 0 or null)
En bref , si vous voulez juste tester quelque chose comme réussite / échec (aka "vrai" / "faux"), alors passez une commande à votre instruction if
ou &&
etc., sans crochets. Pour des comparaisons complexes, utilisez des parenthèses avec les opérateurs appropriés.
Et oui, je suis conscient qu'il n'y a pas de type booléen natif dans Bash, et que if
et [
et true
sont techniquement des "commandes" et non des "instructions"; ce n'est qu'une explication fonctionnelle très basique.