Un primer booleano rapido per Bash
La if
dichiarazione prende un comando come argomento (come fanno &&
, ||
e così via). Il codice risultato intero del comando viene interpretato come un valore booleano (0 / null = true, 1 / else = false).
L' test
istruzione accetta operatori e operandi come argomenti e restituisce un codice risultato nello stesso formato di if
. Un alias test
dell'istruzione è [
, che viene spesso utilizzato if
per eseguire confronti più complessi.
Le istruzioni true
e false
non fanno nulla e restituiscono un codice risultato (0 e 1, rispettivamente). Quindi possono essere usati come letterali booleani in Bash. Ma se metti le dichiarazioni in un posto in cui sono interpretate come stringhe, ti imbatterai in problemi. Nel tuo caso:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
Così:
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;
Questo è simile a fare qualcosa di simile echo '$foo'
contro echo "$foo"
.
Quando si utilizza l' test
istruzione, il risultato dipende dagli operatori utilizzati.
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)
In breve , se vuoi semplicemente testare qualcosa come pass / fail (aka "true" / "false"), passa un comando alla tua istruzione if
o &&
ecc., Senza parentesi. Per confronti complessi, utilizzare le parentesi con gli operatori appropriati.
E sì, sono consapevole che non esiste un tipo booleano nativo in Bash, e che if
e [
e e true
tecnicamente "comandi" e non "istruzioni"; questa è solo una spiegazione molto basilare e funzionale.