Разве не было бы хорошо, если бы у 'test' была возможность вывести значение сразу? Просто вариант. Это все, что нам нужно.
Тодд Уолтон
Ответы:
15
Вы получаете 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
Нет. Только выходные данные могут быть перенаправлены. Во всяком случае, обычно в этом нет необходимости. Чтобы сохранить его для последующего использования, просто назначьте его переменной. Или скажите нам, каково ваше намерение с этим значением.
manatwork
2
Код выхода помещается в $?переменную - по крайней мере, пока он не будет перезаписан следующей командой, которую вы выполняете.
Шадур
1
PS: Вы можете использовать в $PIPESTATUSмассив , чтобы получить результат нескольких команд в конвейере. $?будет по быть результатом последней команды в конвейере , если опция выключена (по умолчанию). pipefail
10
@indieman, если вам нужно сделать что-то еще в зависимости от состояния выхода, вам даже не нужно его сохранять - просто используйтеif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard
5
Другой способ
test 4-lt 6&& echo 1|| echo 0
Но будьте осторожны в этом случае. Если testвозвращает успех и echo 1неудачи echo 0будут выполнены.
Если вы хотите получить результат сравнения по стандарту out вместо кода выхода, вы можете использовать expr(1)команду:
$ expr 4'<='61
Следует отметить две вещи:
вам, скорее всего, нужно будет указать оператора, так как многие из них конфликтуют с метасимволами оболочки
выходное значение противоположно коду возврата для test. testвозвращает 0 для истины (что является стандартом для кодов выхода), но exprвыводит 1 для истины.
3. Существует testвстроенная команда оболочки, которая значительно быстрее (около 50 раз на моей машине) , чем testи exprисполняемые файлы из Coreutils пакета.
manatwork
+1 за второй балл. Может получиться ошибка, которую очень сложно найти, если ты испортишь это.
Ответы:
Вы получаете 0 или 1. В коде выхода.
Обновление : чтобы сохранить код выхода для последующего использования, просто назначьте его переменной:
источник
$?
переменную - по крайней мере, пока он не будет перезаписан следующей командой, которую вы выполняете.$PIPESTATUS
массив , чтобы получить результат нескольких команд в конвейере.$?
будет по быть результатом последней команды в конвейере , если опция выключена (по умолчанию).pipefail
if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Другой способ
Но будьте осторожны в этом случае. Если
test
возвращает успех иecho 1
неудачиecho 0
будут выполнены.источник
Если вы хотите получить результат сравнения по стандарту out вместо кода выхода, вы можете использовать
expr(1)
команду:Следует отметить две вещи:
test
.test
возвращает 0 для истины (что является стандартом для кодов выхода), ноexpr
выводит 1 для истины.источник
test
встроенная команда оболочки, которая значительно быстрее (около 50 раз на моей машине) , чемtest
иexpr
исполняемые файлы из Coreutils пакета.Вы можете ввести следующую команду:
источник