Ответы:
Вы получаете 0 или 1. В коде выхода.
bash-4.2$ test 4 -lt 6
bash-4.2$ echo $?
0
bash-4.2$ test 4 -gt 6
bash-4.2$ echo $?
1
Обновление : чтобы сохранить код выхода для последующего использования, просто назначьте его переменной:
bash-4.2$ test 4 -lt 6
bash-4.2$ first=$?
bash-4.2$ test 4 -gt 6
bash-4.2$ second=$?
bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1
$?
переменную - по крайней мере, пока он не будет перезаписан следующей командой, которую вы выполняете.
$PIPESTATUS
массив , чтобы получить результат нескольких команд в конвейере. $?
будет по быть результатом последней команды в конвейере , если опция выключена (по умолчанию). pipefail
if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Если вы хотите получить результат сравнения по стандарту out вместо кода выхода, вы можете использовать expr(1)
команду:
$ expr 4 '<=' 6
1
Следует отметить две вещи:
test
. test
возвращает 0 для истины (что является стандартом для кодов выхода), но expr
выводит 1 для истины.test
встроенная команда оболочки, которая значительно быстрее (около 50 раз на моей машине) , чем test
и expr
исполняемые файлы из Coreutils пакета.