124

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

$ echo "5X5"

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

4

8 回答 8

225

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

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

查看Bash 参考手册中的 Shell Arithmetic 部分以获取完整的运算符列表。

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

于 2012-06-14T19:20:09.440 回答
48

对于更高级和更精确的数学,请考虑使用 bc(1)。

echo "3 * 2.19" | bc -l 
6.57
于 2012-06-14T19:21:43.860 回答
20

内部方法

Bash支持使用$(( expression )). 例如:

$ echo $(( 5 * 5 ))
25

外部方法

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

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

$ /usr/bin/expr 5 \* 5
25
于 2012-06-14T19:30:27.610 回答
17

经典的解决方案是:

 expr 5 \* 5

expr仅适用于整数操作数。另一个不错的选择是:

 echo 5 5\*p | dc

dc可以使用非整数操作数。

于 2012-06-14T19:24:38.237 回答
8

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

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
于 2012-08-15T19:35:20.677 回答
7

我使用这个函数,它使用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 的算术扩展不支持浮点数(但 Korn shell 和 zsh 支持)。

例子:

$ ksh -c 'echo "$((3.0 / 4))"'
0.75
于 2012-06-14T20:54:21.883 回答
4

我有一个用于此目的的简单脚本:

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'(如果表达式包含任何括号,您仍然必须使用引号)。
于 2012-06-14T19:29:55.883 回答
3

如果你喜欢 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
于 2019-01-05T17:38:24.480 回答