Answers:
是的,您可以使用bash的内置算术扩展$(( ))
进行一些简单的数学运算
$ echo "$((5 * 5))"
25
查看《Bash参考手册》中的 “ Shell Arithmetic”部分,以获取运算符的完整列表。
经典解决方案是:
expr 5 \* 5
另一个不错的选择是:
echo 5 5\*p | dc
这两种解决方案都只能使用整数操作数。
k
。我当然记得默认精度为0(截断为整数)。我记错了吗,还是仅仅是新的实现改变了行为?
dc
由于我的代数更多,RPN更少,所以这些年来我很少使用过,所以我不记得了。在我使用的GNU系统上,默认值为0。一个旧的(1993)FreeBSD man
页面提到默认值为零,而较旧的BSD man
页面则没有。
echo '4 k 50.5 7 / p' | dc
可以正常工作(输出:)7.2142
。
我使用此函数,该函数使用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
,*
因为它*
是外壳中的特殊字符。如下使用它:
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(如果表达式包含任何括号,您仍然必须使用引号)。tr
可用于对多个字符进行字符映射。
如果您喜欢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
dc
与浮子一起使用。尝试echo '4 k 50 7 / p' | dc
。输出为7.1428
。该k
命令设置精度。