Тестовая команда в Unix не печатает вывод

20

Когда я набираю это в терминале

test 4 -lt 6

Я не получаю никакого вывода. Почему бы нет? Мне нужно это 0 или 1

indieman
источник
1
Разве не было бы хорошо, если бы у '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
источник
1
есть ли способ передать код выхода?
инди
3
Нет. Только выходные данные могут быть перенаправлены. Во всяком случае, обычно в этом нет необходимости. Чтобы сохранить его для последующего использования, просто назначьте его переменной. Или скажите нам, каково ваше намерение с этим значением.
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будут выполнены.

порыв
источник
2

Если вы хотите получить результат сравнения по стандарту out вместо кода выхода, вы можете использовать expr(1)команду:

$ expr 4 '<=' 6
1

Следует отметить две вещи:

  1. вам, скорее всего, нужно будет указать оператора, так как многие из них конфликтуют с метасимволами оболочки
  2. выходное значение противоположно коду возврата для test. testвозвращает 0 для истины (что является стандартом для кодов выхода), но exprвыводит 1 для истины.
CAMH
источник
1
3. Существует testвстроенная команда оболочки, которая значительно быстрее (около 50 раз на моей машине) , чем testи exprисполняемые файлы из Coreutils пакета.
manatwork
+1 за второй балл. Может получиться ошибка, которую очень сложно найти, если ты испортишь это.
Эмануэль Берг
2

Вы можете ввести следующую команду:

echo $(test -e myFile.txt) $?
MCH
источник