Сначала передайте реляционные операторы AND в bc
, чтобы избавиться от пунктуации (также только один раз вызывает bc
):
if (( $(echo "$c1 < 0 && $c2 < 0 && $c3 < 0" | bc -l) == 1 ))
then
>&2 echo -e " ++ Constraints OK"
else
>&2 echo -e " ++ Constraints WRONG"
fi
Хотя, если бы это был я, я бы создал функцию оболочки, возвращающую «истинное» состояние выхода, если bc оценивает результат выражения как ненулевой. Тогда вы можете скрыть большую часть уродливой пунктуации в одном месте, отделенном от вашей основной логики:
function bc_true() {
(( $(echo "$@" | bc -l) != 0 ))
}
И напишите (IMO) чистое выражение оболочки:
if bc_true "$c1 < 0 && $c2 < 0 && $c3 < 0"
then
...