我使用的是串行终端提供输入到我们的实验室实验。 我发现,使用
$ echo "5X5"
刚刚返回的字符串"5X5"
。 有没有执行乘法运算的命令?
我使用的是串行终端提供输入到我们的实验室实验。 我发现,使用
$ echo "5X5"
刚刚返回的字符串"5X5"
。 有没有执行乘法运算的命令?
是的,你可以使用bash的内置算术展开$(( ))
做一些简单的数学
$ echo "$((5 * 5))"
25
检查Bash的参考手册壳牌运算部分运营商的完整列表。
为了完整起见,其他指出的那样,如果你需要的任意精度, bc
或dc
会更好。
对于更高级的和精确的数学考虑使用BC(1)。
echo "3 * 2.19" | bc -l
6.57
击支持算术扩展用$(( expression ))
例如:
$ echo $(( 5 * 5 ))
25
一些实用程序提供算术,包括BC和EXPR。
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
经典的解决办法是:
expr 5 \* 5
另外一个不错的选项是:
echo 5 5\*p | dc
这两种解决方案将只使用整数操作数工作。
一个简单的shell功能(没有使用sed需要)应该做的解释“5X5”的把戏
$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '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的算术扩展不支持浮点数(但Korn shell程序和的zsh做)。
例:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
我有一个简单的脚本我用这个:
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'
(你还有如果表达式包含任何括号使用引号)。 如果你喜欢蟒蛇,并有安装包的选项,你可以使用这个工具 ,我做。
# 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