我已经注意到以下文章,并认为这里有一些关于如何在bash中执行计算的重要信息:
但是,我无法使用建议的方法强制在bash中进行浮点计算。 (带有当前bash内核和&& CentOS 7的Mac OS X):
Non-Elevated Shell: ~/> $ echo "$((20.0/7))"
-bash: 20.0/7: syntax error: invalid arithmetic operator (error token is ".0/7")
Non-Elevated Shell: ~/> $ bash --version | head -n 1
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Non-Elevated Shell: ~/> $ l
Mac Shell: ~/>$ echo "$((20.0/7))"
-bash: 20.0/7: syntax error: invalid arithmetic operator (error token is ".0/7")
Mac Shell: ~/>$ bash --version | head -n 1
GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin15.4.0)
Mac Shell: ~/>$
有人看到我上面的方法做错了吗?这种方法是否与现代bash兼容或者是否已弃用?
我知道我可以使用bc
但是我注意到这将花费更长的时间,因为bc是外部命令而不是内置shell。
Mac Shell: ~/>$ time echo "$((20/7))"
2
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Mac Shell: ~/>$ time echo 'scale=2; 20/7' | bc
2.85
real 0m0.011s
user 0m0.002s
sys 0m0.006s
Mac Shell: ~/>$
虽然现在这对我来说可能不是问题,但在编写更复杂的脚本时,这肯定会让我失望。
答案 0 :(得分:2)
shell arithmetic上的当前GNU Bash文档指出:
评估是在固定宽度的整数中完成的,没有检查溢出,但除以0被捕获并标记为错误。运算符及其优先级,关联性和值与C语言中的相同。
浮动点没有规定。
Korn shell和Zsh支持浮点运算。