[コマンド] bc(数値計算ソフト)でコマンドラインから計算式を渡して出力させる方法

Linuxを使っている時、コマンドライン上でちょっとした数字の計算をしたい場合、bcという数値計算ソフトを使う方法があります。bcはそれ自体が数値計算言語という位置付けで、簡単な計算以外にもプログラミング的に複雑な計算も可能になっているようです。今回はそこまで深入りせずに、簡単な四則演算程度で使う方法について紹介していきます。

まず基本的には
$ bc

とコマンドを打つとインタラクティブモードに入り対話的に計算を行うことが出来ます。インタラクティブモードでbcを終了させるときは「quit」とタイプして実行します。
(なお「exit」やCtrl+Cでは終了しない模様)

さてインタラクティブモードで計算するのも便利なのですが、bashなどシェルのコマンドラインから直接bcに計算式を渡して計算させたい場合も出てくるかと思います。それが出来ると、毎回インタラクティブモードに入らなくてもよく、quitと打って終了させる手間も省けます。

しかし、bcに直接引数として以下のように計算式を渡しても解釈してくれません。
$ bc 計算式

計算式をクォートやダブルクォートで囲っても無効です。上記のようにコマンドを書いてしまうと、bcは計算式をファイル名を示す文字列として解釈してファイルとして読み込もうとします。まず起こらないと思いますが、偶然に計算式と同名のファイルが同じディレクトリ内に存在するとヒドい目に合うかも知れません。

ではどうやってコマンドラインから直接bcに計算式を渡せばいいかというと、それは「echoコマンド」と組み合わせることで可能となります。やり方としてはechoで計算式をそのまま出力させるようにしてそれをパイプでbcに渡すという方法になります。
$ echo '計算式' | bc

(echoコマンドとはなんぞや?と気になる方は別途お調べ下さい)
なおsinなど数学関数を利用して計算したいときは上記の書き方だとライブラリが読み込まれていないためエラーになります。その場合は、以下のように"-l"オプションを付けるといいでしょう。
$ echo '計算式' | bc -l

(なおbcではsin関数を使う場合にはsin()とか書かず別の書き方になります)
また小技として、いくつかの計算式をセミコロンでつなげると複数の計算結果をまとめて出力出来ます。
$ echo '計算式; 計算式; 計算式' | bc

そしてこの方法を利用すると、bcでscaleの指定もコマンドラインから行うことが出来ます。bcはデフォルトでは割り算で計算結果に小数点以下が付く場合でも整数部分しか出力されないようです。小数点以下何桁まで出力するかはインタラクティブモードの場合は
scale=3

のようにscaleの値を設定すれば小数点以下3桁まで表示されます。これをコマンドラインから行う場合、セミコロンで式をつなげる方法を利用して
$ echo 'scale=3; 5/3' | bc

と始めにscaleの値を書いて計算式につなげることで出来ます。

最後に応用として、シェルスクリプトファイルを書いてる時に何らかの計算処理が必要な場合に、コマンド置換(Command substitution)で以上のようなbcの構文を入れ込んでやるといった使い方も出来ます。

まぁ計算だけなら電卓ソフトや表計算ソフトでも可能ですしその方が便利な場合もありますが、コマンドライン上でも出来るということを押さえておくのもいいかと思います。


追記(2018年2月22日)
$ bc <<< '1+1'

のように文字列自体をリダイレクトして渡すという方法も使えるようです。
("<<<"の記号の意味に関してはbashのマニュアルのBash Reference Manual: Redirectionsあたりを参照)


続きの記事
[コマンド] bc(数値計算ソフト)の結果出力で、小数点前の0(ゼロ)を省略させないようにする方法

コメント