Linux 上最好的命令行计算器
每个现代 Linux 桌面发行版都附带一个默认的基于 GUI 的计算器应用程序。另一方面,如果您的工作空间充满了终端窗口,并且您希望在其中一个终端中快速处理一些数字,那么您可能正在寻找命令行计算器。在这一类别中,GNU bc
(“基本计算器”的缩写)是难以击败的。虽然 Linux 上有许多可用的命令行计算器,但我认为 GNU bc 无疑是最强大和最有用的。
在 GNU 时代之前,bc
实际上是一种历史上著名的任意精度计算器语言,其首次实现可以追溯到 20 世纪 70 年代的旧 Unix 时代。最初,bc
是一种更为人所知的编程语言,其语法类似于 C 语言。随着时间的推移,最初的 bc
演变为 POSIX bc
,最后演变为今天的 GNU bc
。
GNU bc 的特性
今天的 GNU bc
是对 bc
早期实现的许多增强的结果,现在它已成为所有主要 GNU/Linux 发行版的标准。它支持具有任意精度数字的标准算术运算符,以及输入和输出的多个数字基数(例如二进制、十进制、十六进制)。
如果您熟悉C语言,您会看到bc
中使用了相同或相似的数学运算符。一些受支持的运算符包括算术 (+、-、、/、%、++、--)、比较 (<、>、==、!=、<=、>=)、逻辑 (!、&&、||)、按位 (&、|、^、~、<<、>>)、复合赋值 (+=、-=、*=、/=、%=、&=、|=、^=、&&=、||=、<<=、>>=) 运算符。 bc
带有许多有用的内置函数,例如平方根、正弦、余弦、反正切、自然对数、指数等。
如何使用 GNU bc
作为命令行计算器,GNU bc 的可能用例几乎是无限的。在本教程中,我将介绍 bc 命令的一些流行功能。如需完整手册,请参阅官方来源。
除非您有预先编写的 bc 脚本,否则通常会在交互模式下运行 bc,其中任何以换行符结尾的键入语句或表达式都会被当场解释和执行。只需键入以下内容即可进入交互式 bc
会话。要退出会话,请输入“quit
”并按 Enter。
$ bc

本教程其余部分中提供的示例应该在 bc
会话中键入。
类型表达式
要计算算术表达式,只需在闪烁的光标处键入表达式,然后按 ENTER
。如果需要,您可以将中间结果存储到变量中,然后在其他表达式中访问该变量。

在给定会话中,bc
维护先前键入的行的无限历史记录。只需使用向上箭头键即可检索以前键入的行。如果您想限制历史记录中保留的行数,请将该行数分配给名为 history
的特殊变量。默认情况下,该变量设置为 -1,表示无限制。
开关输入/输出底座
通常,您希望键入输入表达式并以二进制或十六进制格式显示结果。为此,bc
允许您切换输入或输出数字的数字基数。输入和输出基数分别存储在ibase
和obase
中。这些特殊变量的默认值为 10,有效值为 2 到 16(如果是 obase
,则为 BC_BASE_MAX
环境变量的值)。要切换数字基数,您只需更改 ibase
和 obase
的值即可。例如,以下是对两个十六进制/二进制数求和的示例:

请注意,此处我在 ibase=16
之前指定 obase=16
,反之亦然。这是因为,如果我首先指定 ibase=16
,后续的 obase=16
语句将被解释为将 16 进制的 16 分配给 obase
(即十进制的 22),这不是我们想要的。
调整精度
在bc
中,数字的精度存储在一个名为scale
的特殊变量中。该变量表示小数点后的小数位数。默认情况下,scale
设置为 0,这意味着所有数字和结果都被截断/存储为整数。要调整默认精度,您只需更改 scale
变量的值即可。
scale=4

使用内置函数
除了简单的算术运算之外,GNU bc 通过外部数学库还提供了广泛的内置高级数学函数。要使用这些函数,请从命令行使用 -l
选项启动 bc
。
这里展示了其中一些内置函数。
1. N
的平方根:
sqrt(N)
2. X
的正弦(X
以弧度为单位):
s(X)
3. X
的余弦(X
的单位是弧度):
c(X)
4. X
的反正切(返回值是弧度):
a(X)
5.X
的自然对数:
l(X)
6.X
的指数函数:
e(X)
作为语言的其他好处
作为一种成熟的计算器语言,GNU bc 支持简单语句(例如变量赋值、break、return)、复合语句(例如 if、while、for 循环)和自定义函数定义。我不会详细介绍这些功能,但您可以从官方手册中轻松了解如何使用它们。这是一个非常简单的函数定义示例:
define dummy(x){
return(x * x);
}
dummy(9)
81
dummy(4)
16
以非交互方式使用 GNU bc
到目前为止,我们已经在交互式会话中使用了 bc
。然而,相当流行的 bc
用例实际上涉及在 shell 脚本中非交互地运行 bc
。在这种情况下,您可以使用 echo
通过管道将输入发送到 bc
。例如:
$ echo "40*5" | bc
$ echo "scale=4; 10/3" | bc
$ echo "obase=16; ibase=2; 11101101101100010" | bc

结论
总而言之,GNU bc
是一款功能强大、用途广泛的命令行计算器,真正符合您的期望。 bc
预装在所有现代 Linux 发行版上,可以使您无需离开终端即可轻松处理数字处理任务。此外,如果您的 shell 脚本需要浮点计算,脚本可以轻松调用 bc 来完成工作。总而言之,GNU bc
绝对应该出现在您的生产力工具集中。