BashスクリプトにはGNUbc用の2つの関数があります。
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で正常に機能します。bcは、;で区切られた1行に複数の関数を許可していないようです。ただし、エコーする必要があります-n | 各関数の最後に改行を含むbc。上記の出力は2.5であり、自分でbc-iと入力した場合に期待される3.0ではありません。bashは、すべてを1つのインスタンスにエコーするのではなく、エコー出力の各行に対してbcを呼び出すようです。これに対する回避策はありますか?