我正在使用串行终端为我们的实验室实验提供输入。我发现使用
$ echo "5X5"
只返回一个"5X5"
的字符串。是否有执行乘法运算的命令?
答案 0 :(得分:188)
是的,您可以使用bash's built-in Arithmetic Expansion $(( ))
来做一些简单的数学
$ echo "$((5 * 5))"
25
检查Shell Arithmetic section in the Bash Reference Manual以获取完整的操作员列表。
答案 1 :(得分:42)
对于更高级和精确的数学,请考虑使用bc(1)。
echo "3 * 2.19" | bc -l
6.57
答案 2 :(得分:15)
Bash通过$(( expression ))
支持arithmetic expansion。例如:
$ echo $(( 5 * 5 ))
25
许多实用程序提供算术运算,包括 bc 和 expr 。
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
答案 3 :(得分:11)
经典的解决方案是:
expr 5 \* 5
另一个不错的选择是:
echo 5 5\*p | dc
这两种解决方案都只适用于整数操作数。
答案 4 :(得分:7)
一个简单的shell函数(不需要sed)应该可以解释'5X5'
$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
答案 5 :(得分:5)
我使用此函数使用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
答案 6 :(得分:3)
我使用了一个简单的脚本:
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'
(如果表达式包含任何括号,您仍然必须使用引号)。答案 7 :(得分:2)
如果您喜欢python并可以选择安装软件包,则可以使用我制作的utility。
# 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