怎么样称得上是Linux下优秀的命令行计算器
每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，GNU bc（basic calculator的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。 在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的b
bc 计算器
219.230.164.9
用Python当计算器用好了。
微博评论
2014-12-04T10:27:11.000
219.230.164.9
不会写python 只会用python 解释器下做加减法的捂脸飘过[拍砖][互相拍砖]
微博评论
2014-12-04T10:27:11.000
219.230.164.9
python足矣
微博评论
2014-12-04T10:27:11.000
58.23.5.20
irb//@Murakumo叢雲: 转发微博
微博评论
2014-12-04T12:03:01.000
58.23.5.20
irb //@人家要变成奶酪了:irb//@Murakumo叢雲: 转发微博
微博评论
2014-12-04T12:03:01.000
157.55.39.185
@我的印象笔记
微博评论
2014-12-04T13:03:02.000
118.249.73.129
我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T14:03:00.000
118.249.73.129
sympy巨爽//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T14:03:00.000
118.249.73.129
我说一个笑话，现在还有人用perl[哈哈] 是不是很黑？//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T14:03:00.000
118.249.73.129
一直用python//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T14:03:00.000
178.154.243.111
看来bc好强大，以前还用PHP，MySQL呢，得h改行了。 //@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T14:33:00.000
61.129.93.172
烧死perl→_→//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T15:03:01.000
61.129.93.172
bc确实不错，可惜以前不会玩
微博评论
2014-12-04T15:03:01.000
178.154.243.111
簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T15:33:00.000
27.159.211.28
awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T16:03:02.000
27.159.211.28
@有道云笔记收藏
微博评论
2014-12-04T16:03:02.000
27.159.211.28
好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T16:03:02.000
27.159.211.28
对我来说，bc就足够应付了。
微博评论
2014-12-04T16:03:02.000
86.30.204.219
//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T17:33:02.000
86.30.204.219
bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了
微博评论
2014-12-04T17:33:02.000
221.4.190.188
我直接用Matlab，M语言算不算？
微博评论
2014-12-04T18:03:01.000
221.4.190.188
我一般用scheme //@西瓜大丸子汤:bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了
微博评论
2014-12-04T18:03:01.000
192.81.128.254
Linux中国:【怎么样称得上是Linux下优秀的命令行计算器 | 每个现代的......】
微博评论
2014-12-04T18:33:01.000
192.81.128.254
python大法好//@Linux中国: 好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T18:33:01.000
221.6.159.253
很不错哦，以前就关注到了bc，当时一个很困惑的地方就在于，默认情况下，计算结果的小数位数为０，而我一时也找不到在哪里调，简单翻了下man手册，写的太啰嗦咯，木有耐心的我就木有看完，现在可好咯，原来只要简单的使用一下scale=xx就可以咯．很不错．一个很有用的命令行计算工具．个人感觉比python用起来简单多咯，而且用起来更像计算器的感觉嘛
朩ダo○
2014-12-04T18:35:12.000
66.249.79.126
作为命令行控，这个得转//@西瓜大丸子汤: bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了
微博评论
2014-12-04T19:03:01.000
125.78.141.62
用ruby也行啊~//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-04T19:33:00.000
114.113.202.15
不错不错，很强大
微博评论
2014-12-04T20:03:00.000
42.94.192.75
当然用js，任何平台浏览器F12就有输入框，全世界最方便的输入方式 //@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用pe
微博评论
2014-12-04T21:03:01.000
220.181.108.170
一般都用python//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-05T00:33:01.000
157.55.39.185
我才不会告你你们我的计算机叫Macaulay2呢[哈哈]//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。
微博评论
2014-12-05T05:03:02.000
每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，GNU bc（basic calculator的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。 在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的b
每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，[GNU bc](http://www.gnu.org/software/bc/)（“basic calculator”的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。


在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的bc演化成POSIX bc，最后变成了今天的GNU bc。


![](/data/attachment/album/201412/03/221657wgwogjauy1g1am44.jpg)


### GNU bc的特性


现在的GNU bc是早期bc经过若干次改进和功能增强的结果。目前它被所有的主流GNU/Linux发行版所收纳。GNU bc支持高精度数字和多种数值类型（例如二进制、十进制、十六进制）的输入输出。


如果你对C语言很熟悉的话，你会发现bc使用了和C语言一样或相似的算术操作符。所支持的操作符包括算术运算符（+, -, \*, /, %, ++, --）、比较运算符（<, >, ==, !=, <=, >=）、逻辑运算符（!, &&, ||）、位运算符（&, |, <sup> ,</sup> ~, <<, >>）和复合赋值运算符（+=, -=, \*=, /=, %=, &=, |=, <sup> =,</sup> &&=, ||=, <<=, >>=）。bc内置了很多有用的函数，像是平方根、正弦、余弦、反正弦、自然对数、指数等。


### 如何使用GNU bc


作为一个基于命令行的计算器，GNU bc的使用没有限制。在本文中，我会向大家介绍bc命令的几个常用的特性。如果你想要更加详细的指导，你可以查阅[官方指南](https://www.gnu.org/software/bc/manual/bc.html)。


如果你没有一个预先写好的bc脚本，那么你可以在交互模式下运行bc。在这种模式下，你输入的以回车结束的任何声明或者表达式会被立刻计算出结果。你需要输入以下命令来进入bc的交互界面。如果想退出bc，你可以输入'quit'并且按回车。



```
$ bc 

```

![](/data/attachment/album/201412/03/221710bkifrp2p0mmnmhrs.jpg)


本文下面展示的例子请在bc交互界面中输入。


### 输入表达式


如果想要计算一个算术表达式，我们可以在闪烁的光标处输入该表达式，然后按回车确认。你也可以将该结果存储到一个变量中，然后在其他表达式中使用该变量。


![](/data/attachment/album/201412/03/221713rqbdofpb29lozfvp.png)


在一个bc的交互界面中，保存着没有个数限制的命令历史记录。使用上方向键来查看之前输入的命令。如果你想限制历史记录保存的命令数量，你可以将一个名为history的特殊变量设置成你希望的数值。该变量默认为-1，也就是“历史记录数量没有限制”。


### 输入输出进制切换


经常会发生的是，你输入一个表达式并且想使用二进制或者十六进制来显示结果。bc允许你在输入输出数字的进制间转换。输入和输出的数系基分别存储在ibase和obase变量中，默认值为10，有效的数值是2到16（或者环境变量BC*BASE*MAX的值）。你只需要更改ibase和obase的值就可以在不同进制之间转换了。下面是一个求两个十六进制/二进制数和的例子：


![](/data/attachment/album/201412/03/221715a1nvytqr3nn6zpjj.jpg)


需要注意的是，我有意地将obase=16放到了ibase=16前面，**反过来则是不可以的**。这个是因为如果我先输入ibase=16，那么随后输入的obase=16中的16会被认为是16进制的数字，也就是十进制的22。当然这个不是我们所期望的。


### 调整精度


在bc中，数字的精度存储在一个名为scale的特殊变量中。该变量表示小数点后数字的个数。scale默认为0，意味着所有的数字和结果以整数形式储存。你可以通过改变scale这个特殊变量的值，来调整数值的精度。



```
scale=4 

```

![](/data/attachment/album/201412/03/221719az43ij11o84gbgbg.jpg)


### 使用内置函数


除了简单的算术操作符，GNU bc还通过外部的数学函数库来提供许多高级的数学函数。你可以在命令行界面使用“-l”选项来打开bc。


这里描述了一些内置的函数。


N的二次方根：



```
 sqrt(N) 

```

X的正弦（X是弧度）：



```
s(X)

```

X的余弦（X是弧度）：



```
c(X)

```

X的反正弦（返回值是弧度）：



```
a(X)

```

X的自然对数：



```
l(X)

```

X的指数对数：



```
e(X) 

```

### 当做语言来用


作为一个计算语言，GNU bc支持简单的声明（变量赋值、中断、返回等）、复合语句（if、while、for loop等）和自定义函数。在这里我不会涉及到这些特性的细节，不过你可以通过[官方指南](https://www.gnu.org/software/bc/manual/bc.html)来学习如何使用这些特性。下面是一个简单的函数示例：



```
define dummy(x){
return(x * x);
}
dummy(9)
81
dummy(4)
16 

```

### 在非交互界面下使用GNU bc


到目前为止，我们一直在交互界面下使用bc。不过更加流行的使用bc的方法是在没有交互界面的脚本中运行bc。这种情况下，你可以使用echo命令并且借助管道来向bc发送输入内容。例如：



```
$ echo "40*5" | bc
$ echo "scale=4; 10/3" | bc
$ echo "obase=16; ibase=2; 11101101101100010" | bc

```

![](/data/attachment/album/201412/03/221721hj8r96ixx6orbi78.jpg)


总结一下，GNU bc是一款强大并且通用的基于命令行的计算器应用，它绝对不会让你失望。它预装在所有的现代Linux发行版中，bc可以让你不用离开命令行就可以进行高效的数学计算。所以，GNU bc一定会是你的最爱。




---


via: <http://xmodulo.com/command-line-calculator-linux.html>


作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[JonathanKang](https://github.com/JonathanKang) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出

