bou*_*ppo 108 unix bash command-line
我正在使用串行终端为我们的实验室实验提供输入.我发现使用了
$ echo "5X5"
Run Code Online (Sandbox Code Playgroud)
只返回一个字符串"5X5".是否有执行乘法运算的命令?
Kur*_*tal 197
是的,你可以使用bash的内置算术扩展$(( ))来做一些简单的数学运算
$ echo "$((5 * 5))"
25
Run Code Online (Sandbox Code Playgroud)
有关运算符的完整列表,请查看Bash参考手册中的Shell Arithmetic部分.
为了完整起见,正如其他人指出的那样,如果你需要任意精度,bc或者dc会更好.
tvm*_*tvm 44
要获得更高级和更精确的数学,请考虑使用bc(1).
echo "3 * 2.19" | bc -l
6.57
Run Code Online (Sandbox Code Playgroud)
Tod*_*obs 16
击支持算术扩展用$(( expression )).例如:
$ echo $(( 5 * 5 ))
25
Run Code Online (Sandbox Code Playgroud)
许多实用程序提供算术,包括bc和expr.
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
Run Code Online (Sandbox Code Playgroud)
Wil*_*ell 12
经典的解决方案是:
expr 5 \* 5
Run Code Online (Sandbox Code Playgroud)
另一个不错的选择是:
echo 5 5\*p | dc
Run Code Online (Sandbox Code Playgroud)
这两种解决方案都只适用于整数操作数.
一个简单的shell函数(不需要sed)应该解释'5X5'的技巧
$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
Run Code Online (Sandbox Code Playgroud)
我使用此函数,该函数使用bc并因此支持浮点计算:
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
Run Code Online (Sandbox Code Playgroud)
例:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Run Code Online (Sandbox Code Playgroud)
Bash的算术扩展不支持浮点数(但Korn shell和zsh支持)。
例:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
Run Code Online (Sandbox Code Playgroud)