Section 25.1: 数学计算用 dc命令

dc 是 Unix 上最古老的程序之一。

它使用反向添加运算符号,即先堆叠数字,再进行运算。

例如,1+1 被写成 1 1+。

要打印堆栈顶端的元素,使用命令 p

echo '2 3 + p' | dc
5
or
dc <<< '2 3 + p'
5

您可以多次打印顶部元素

dc <<< '1 1 + p 2 + p'
2
4

负数使用 _ 前缀

dc <<< '_1 p'
-1

您还可以用大写字母 A 到 F 表示 10 到 15 之间的数字,用 . 表示小数点。

dc <<< 'A.4 p'
10.4

dc 使用任意精度的小数,这意味着小数的精度仅受可用内存的限制。默认情况下,精度设置为 0 小数

dc <<< '4 3 / p'
1

我们可以使用 k 命令提高精度。

dc <<< '2k 4 3 / p'
1.33

dc <<< '4k 4 3 / p'
1.3333

也可以在多行上使用计算

dc << EOF
1 1 +
3 *
p
EOF
6

bc 是 dc 的预处理器。

Section 25.2: 使用 bash 计算功能计算数学

还可以进行算术运算,而无需使用任何其他类似程序:

乘法:

echo $((5 * 2))
10

除法:

echo $((5 / 2))
2

取余:

echo $((5 % 2))
1

乘幂:

echo $((5 ** 2))
25

Section 25.3: 数学计算使用 bc

bc 是一种任意精度的计算器语言。它可以交互式使用,也可以通过命令行执行。

例如,它可以打印出表达式的结果:

echo '2 + 3' | bc
5

echo '12 / 5' | bc
2

对于浮点运算,可以导入标准库 bc -l:

echo '12 / 5' | bc -l
2.40000000000000000000

它可用于比较表达式:

echo '8 > 5' | bc
1

echo '10 == 11' | bc
0

echo '10 == 10 && 8 > 3' | bc
1

Section 25.4: 数学计算使用 expr

expr 或 “评估表达式 ”对表达式进行评估,并将结果写入标准输出。

基本算术

expr 2 + 3
5

进行乘法运算时,需要转义 * 号

expr 2 \* 3
6

您还可以使用变量

a=2
expr $a + 3
5

请记住,它只支持整数,因此表达式如下

expr 3.0 / 2

会产生一个错误 expr: not a decimal number: '3.0'。

支持正则表达式匹配模式

expr 'Hello World' : 'Hell\(.*\)rld'
o Wo

或查找搜索字符串中第一个字符的索引

在 Mac OS X 上会出现 expr: 语法错误,因为它使用的是 BSD expr,没有 index 命令,而 Linux 上的 expr 一般是 GNU expr

expr index hello l
3

expr index 'hello' 'lo'
3