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


20

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

test 4 -lt 6

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


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

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 для истины.

1
3. Существует testвстроенная команда оболочки, которая значительно быстрее (около 50 раз на моей машине) , чем testи exprисполняемые файлы из Coreutils пакета.
manatwork

+1 за второй балл. Может получиться ошибка, которую очень сложно найти, если ты испортишь это.
Эмануэль Берг

2

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

echo $(test -e myFile.txt) $?
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.