У меня есть две функции для GNU bc в скрипте Bash.
BC_CEIL="define ceil(x) { if (x>0) { if (x%1>0) return x+(1-(x%1)) else return x } else return -1*floor(-1*x) }\n"
BC_FLOOR="define floor(x) { if (x>0) return x-(x%1) else return -1*ceil(-1*x) }\n"
echo -e "scale=2"$BC_CEIL$BC_FLOOR"ceil(2.5)" | bc
Обе функции прекрасно работают в интерактивном режиме. bc не позволяет использовать несколько функций в одной строке, разделенных; хотя, так что я должен повторить -n | bc с символами новой строки в конце каждой функции. Вышеуказанный вывод равен 2.5, а не ожидаемый 3.0, который я получу, если сам наберу его в bc -i. Кажется, что bash вызывает bc для каждой строки вывода эха, а не выводит все это в один экземпляр. Есть ли обходной путь для этого?