Тест if [ 0 ]
проверяет, является ли 0
пустой строкой (это не так), и возвращает true, если она не пустая. Тест if [ 1 ]
аналогичным образом проверяет, является ли 1
пустой строкой, и возвращает true, если она не пустая. Аналогично, два других теста проверяют, являются ли строки true
и false
пустыми ...
Если вы хотите проверить команды, выполните команды:
if false; then echo False is true; else echo False is false; fi
if true ; then echo True is true; else echo True is false; fi
Большинство машин не имеют команд, называемых 0
или 1
, поэтому вы не можете легко вызывать их как команды.
Вы также можете поэкспериментировать с:
if sh -c "exit 1"; then echo Shell exited as true; else echo Shell exited as false; fi
if sh -c "exit 0"; then echo Shell exited as true; else echo Shell exited as false; fi
В 7-м издании Unix /bin/test
(или, возможно, /usr/bin/test
) была тестовой программой, но обычно вы найдете ссылку /bin/[
. Когда он вызывался именем [
, он требовал, чтобы его последний аргумент был ]
, чтобы вы могли написать условие в квадратных скобках.
Вскоре после этого операция test
была встроена в оболочку вместо того, чтобы быть отдельным исполняемым файлом, но семантика осталась в основном неизменной. Поскольку теперь они различны (встроенные в исполняемый файл), иногда тестовые операции имеют различную функциональность. POSIX определяет базовую линию; различные оболочки и системы обеспечивают различные расширения.
На сегодняшний день пакет autoconf
рекомендует использовать test
вместо [
, хотя это потому, что он использует квадратные скобки для другой цели.