Почему bc выходит из 0 при делении на 0?

Одна команда find выместит все файлы с абсолютным путем

find $(pwd) -type f
3
04.04.2017, 04:03
2 ответа

bc реализации немного различаются по статусу возврата, но общая идея заключается в том, что если вы предоставляете действительный ввод, то bc завершается со статусом 0. 42/0 является допустимым вводом: нет ошибки чтения, и это даже синтаксически допустимое выражение, поэтому bc возвращает 0. Если вы передали вторую строку с другая операция, bc выполнит ее. Это отличается от expr , цель которого - вычислить одно арифметическое выражение; здесь результат этого единственного выражения определяет статус возврата.

Самый простой способ создать статус выхода, указывающий на сбой, - это вызвать false . Такие вещи, как expr 1/0 , имеют свое место только в соревнованиях по запутанному программированию.

6
27.01.2020, 21:09

См. Спецификацию ; это ожидаемое поведение.

Все входные данные были правильно прочитаны bc , поэтому был получен статус выхода 0.

Если вы запустите bc для несуществующего файла, например bc nosuchfile , вы получите другой статус выхода.


Чтобы проиллюстрировать ненулевой статус выхода, я бы либо сравнил ls somefile и ls nosuchfile ], либо я бы показал, как обычно используются статусы выхода 1 и 2 (1 для ожидаемая ошибка или состояние отказа, 2 для непредвиденной ошибки), например:

$ echo hello > file1
$ echo hello > file2
$ echo goodbye > file3
$ cmp -s file1 file2
$ echo $?
0
$ cmp -s file1 file3
$ echo $?
1
$ cmp -s file1 file4
$ echo $?
2
$ 
6
27.01.2020, 21:09

Теги

Похожие вопросы