Швидкий булевий ґрунтовник для Bash
if
Оператор приймає команду в якості аргументу (як &&
, ||
і т.д.). Цілий код результату команди інтерпретується як булева (0 / null = true, 1 / else = false).
Оператор test
бере операторів і операндів як аргументи і повертає код результату в тому ж форматі, що і if
. Псевдонім test
твердження є [
, яке часто використовується if
для виконання більш складних порівнянь.
Оператори true
та false
оператори нічого не роблять і повертають код результатів (0 і 1 відповідно). Тож їх можна використовувати як булеві літерали в Bash. Але якщо ви помістите висловлювання в місце, де вони інтерпретуються як рядки, у вас виникнуть проблеми. У вашому випадку:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
Так:
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;
Це схоже на що - то робити , як echo '$foo'
проти прогнозу echo "$foo"
.
При використанні test
оператора результат залежить від використовуваних операторів.
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)
Коротше кажучи , якщо ви просто хочете перевірити щось на кшталт pass / fail (так само "true" / "false"), тоді передайте команду своєму оператору if
або &&
т.д. без дужок. Для складних порівнянь використовуйте дужки з відповідними операторами.
І так, я знаю , що немає такого поняття , як рідний логічного типу в Bash, і що if
і [
та true
технічно «команда» , а не «заява»; це лише дуже основне, функціональне пояснення.