Швидкий булевий ґрунтовник для 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технічно «команда» , а не «заява»; це лише дуже основне, функціональне пояснення.