命令行终端乘法

我用一个串行终端为我们的实验提供输入

$ echo "5X5"

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

222417 次浏览

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

$ echo "$((5 * 5))"
25

检查 Bash 参考手册中的 Shell 算术部分以获得完整的操作员列表。

正如其他人指出的那样,为了完整起见,如果需要任意的精度,bcdc会更好。

为了获得更高级和更精确的数学,可以考虑使用 BC (1)。

echo "3 * 2.19" | bc -l
6.57

经典的解决方案是:

 expr 5 \* 5

expr只能处理整数操作数。另一个不错的选择是:

 echo 5 5\*p | dc

dc可以用来处理非整数操作数。

我有一个简单的脚本:

me@mycomputer:~$ cat /usr/local/bin/c

#!/bin/sh


echo "$*" | sed 's/x/\*/g' | bc -l

它将 x更改为 *,因为 *是 shell 中的一个特殊字符。使用方法如下:

  • c 5x5
  • c 5-4.2 + 1
  • c '(5 + 5) * 30'(如果表达式包含任何括号,仍然必须使用引号)。

内部方法

Bash 支持 算术扩展$(( expression ))。例如:

$ echo $(( 5 * 5 ))
25

外部方法

许多实用程序提供算术,包括 公元前翻译

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


$ /usr/bin/expr 5 \* 5
25

我使用这个函数,它使用 bc,因此支持浮点计算:

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

例如:

$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797

Bash 的算术扩展不支持 float (但是 Korn shell 和 zsh 支持)。

例如:

$ ksh -c 'echo "$((3.0 / 4))"'
0.75

一个简单的 shell 函数(不需要 sed)就可以解释’5X5’

$ calc() { bc -l <<< ${*//[xX]/*}; }
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25

如果您喜欢 python 并且有安装软件包的选项,您可以使用我制作的这个 效用

# install pythonp
python -m pip install pythonp


pythonp "5*5"
25


pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454


# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800