命令行终端上的乘法

bou*_*ppo 108 unix bash command-line

我正在使用串行终端为我们的实验室实验提供输入.我发现使用了

$ echo "5X5"
Run Code Online (Sandbox Code Playgroud)

只返回一个字符串"5X5".是否有执行乘法运算的命令?

Kur*_*tal 197

是的,你可以使用bash的内置算术扩展$(( ))来做一些简单的数学运算

$ echo "$((5 * 5))"
25
Run Code Online (Sandbox Code Playgroud)

有关运算符的完整列表,请查看Bash参考手册中Shell Arithmetic部分.

为了完整起见,正如其他人指出的那样,如果你需要任意精度,bc或者dc会更好.


tvm*_*tvm 44

要获得更高级和更精确的数学,请考虑使用bc(1).

echo "3 * 2.19" | bc -l 
6.57
Run Code Online (Sandbox Code Playgroud)


Tod*_*obs 16

内部方法

击支持算术扩展$(( expression )).例如:

$ echo $(( 5 * 5 ))
25
Run Code Online (Sandbox Code Playgroud)

外部方法

许多实用程序提供算术,包括bcexpr.

$ echo '5 * 5' | /usr/bin/bc
25

$ /usr/bin/expr 5 \* 5
25
Run Code Online (Sandbox Code Playgroud)


Wil*_*ell 12

经典的解决方案是:

 expr 5 \* 5
Run Code Online (Sandbox Code Playgroud)

另一个不错的选择是:

 echo 5 5\*p | dc
Run Code Online (Sandbox Code Playgroud)

这两种解决方案都只适用于整数操作数.


Mor*_*aki 7

一个简单的shell函数(不需要sed)应该解释'5X5'的技巧

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
Run Code Online (Sandbox Code Playgroud)


Pau*_*ce. 5

我使用此函数,该函数使用bc并因此支持浮点计算:

c () { 
    local a
    (( $# > 0 )) && a="$@" || read -r -p "calc: " a
    bc -l <<< "$a"
}
Run Code Online (Sandbox Code Playgroud)

例:

$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Run Code Online (Sandbox Code Playgroud)

Bash的算术扩展不支持浮点数(但Korn shell和zsh支持)。

例:

$ ksh -c 'echo "$((3.0 / 4))"'
0.75
Run Code Online (Sandbox Code Playgroud)