bc
попытается восстановиться после ошибок и продолжит обработку последующих операторов.Например:
$ echo "2 + 3;
4 4;
3 + 4" | bc
5
(standard_in) 2: parse error
7
Таким образом, не ясно, должна ли она возвращать ошибку в этом случае.Он успешно проанализировал и обработал ввод, корректно восстановившись после ошибки и продолжив обрабатывать более поздние инструкции.Согласно POSIX поведение bc
не определено, когда в неинтерактивном режиме обнаружен неверный ввод, так что это в спецификации того, как bc
должен вести себя.
Есливы хотите проверить, не было ли ошибок при обработке вашего ввода, вы можете перенаправить stderr во временный файл, а затем проверить его содержимое на наличие ошибок:
bcerr=$(mktemp -t bcerr)
result=$(echo 2 4 | bc 2>$bcerr)
if test -s $bcerr
then
# handle errors
else
# handle success
fi
rm $bcerr