TranslateProject/published/201412/20141023 What is a good command-line calculator on Linux.md

116 lines
6.3 KiB
Markdown
Raw Permalink Normal View History

2014-10-27 07:01:18 +08:00
怎么样称得上是Linux下优秀的命令行计算器
================================================================================
每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话[GNU bc][1]“basic calculator”的缩写会是你不二的选择。当然Linux下有很多基于命令行的计算器应用我认为GNU bc是功能最强大和最有用的。
2014-10-27 07:01:18 +08:00
在GNU时代之前bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变最开始的bc演化成POSIX bc最后变成了今天的GNU bc。
### GNU bc的特性 ###
现在的GNU bc是早期bc经过若干次改进和功能增强的结果。目前它被所有的主流GNU/Linux发行版所收纳。GNU bc支持高精度数字和多种数值类型例如二进制、十进制、十六进制的输入输出。
如果你对C语言很熟悉的话你会发现bc使用了和C语言一样或相似的算术操作符。所支持的操作符包括算术运算符+, -, *, /, %, ++, --)、比较运算符(<, >, ==, !=, <=, >=)、逻辑运算符(!, &&, ||)、位运算符(&, |, ^, ~, <<, >>)和复合赋值运算符(+=, -=, *=, /=, %=, &=, |=, ^=, &&=, ||=, <<=, >>=。bc内置了很多有用的函数像是平方根、正弦、余弦、反正弦、自然对数、指数等。
2014-10-27 07:01:18 +08:00
### 如何使用GNU bc ###
作为一个基于命令行的计算器GNU bc的使用没有限制。在本文中我会向大家介绍bc命令的几个常用的特性。如果你想要更加详细的指导你可以查阅[官方指南][2]。
2014-10-27 07:01:18 +08:00
如果你没有一个预先写好的bc脚本那么你可以在交互模式下运行bc。在这种模式下你输入的以回车结束的任何声明或者表达式会被立刻计算出结果。你需要输入以下命令来进入bc的交互界面。如果想退出bc你可以输入'quit'并且按回车。
2014-10-27 07:01:18 +08:00
$ bc
![](https://farm4.staticflickr.com/3939/15403325480_d0db97d427_z.jpg)
本文下面展示的例子请在bc交互界面中输入。
2014-10-27 07:01:18 +08:00
### 输入表达式 ###
如果想要计算一个算术表达式,我们可以在闪烁的光标处输入该表达式,然后按回车确认。你也可以将该结果存储到一个变量中,然后在其他表达式中使用该变量。
![](https://farm6.staticflickr.com/5604/15403325460_b004b3f8da_o.png)
在一个bc的交互界面中保存着没有个数限制的命令历史记录。使用上方向键来查看之前输入的命令。如果你想限制历史记录保存的命令数量你可以将一个名为history的特殊变量设置成你希望的数值。该变量默认为-1也就是“历史记录数量没有限制”。
2014-10-27 07:01:18 +08:00
### 输入输出进制切换 ###
经常会发生的是你输入一个表达式并且想使用二进制或者十六进制来显示结果。bc允许你在输入输出数字的进制间转换。输入和输出的数系基分别存储在ibase和obase变量中默认值为10有效的数值是2到16或者环境变量BC_BASE_MAX的值。你只需要更改ibase和obase的值就可以在不同进制之间转换了。下面是一个求两个十六进制/二进制数和的例子:
2014-10-27 07:01:18 +08:00
![](https://farm6.staticflickr.com/5604/15402320019_f01325f199_z.jpg)
需要注意的是我有意地将obase=16放到了ibase=16前面**反过来则是不可以的**。这个是因为如果我先输入ibase=16那么随后输入的obase=16中的16会被认为是16进制的数字也就是十进制的22。当然这个不是我们所期望的。
2014-10-27 07:01:18 +08:00
### 调整精度 ###
在bc中数字的精度存储在一个名为scale的特殊变量中。该变量表示小数点后数字的个数。scale默认为0意味着所有的数字和结果以整数形式储存。你可以通过改变scale这个特殊变量的值来调整数值的精度。
scale=4
![](https://farm6.staticflickr.com/5597/15586279541_211312597b.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)
### 当做语言来用 ###
2014-10-27 07:01:18 +08:00
作为一个计算语言GNU bc支持简单的声明变量赋值、中断、返回等、复合语句if、while、for loop等和自定义函数。在这里我不会涉及到这些特性的细节不过你可以通过[官方指南][2]来学习如何使用这些特性。下面是一个简单的函数示例:
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
![](https://farm4.staticflickr.com/3943/15565252976_f50f453c7f_z.jpg)
总结一下GNU bc是一款强大并且通用的基于命令行的计算器应用它绝对不会让你失望。它预装在所有的现代Linux发行版中bc可以让你不用离开命令行就可以进行高效的数学计算。所以GNU bc一定会是你的最爱。
2014-10-27 07:01:18 +08:00
--------------------------------------------------------------------------------
via: http://xmodulo.com/command-line-calculator-linux.html
作者:[Dan Nanni][a]
译者:[JonathanKang](https://github.com/JonathanKang)
校对:[wxy](https://github.com/wxy)
2014-10-27 07:01:18 +08:00
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
[a]:http://xmodulo.com/author/nanni
[1]:http://www.gnu.org/software/bc/
[2]:https://www.gnu.org/software/bc/manual/bc.html