有关shell计算的文档?

时间:2016-08-13 21:01:25

标签: bash

我已经注意到以下文章,并认为这里有一些关于如何在bash中执行计算的重要信息:

https://unix.stackexchange.com/questions/40786/how-to-do-integer-float-calculations-in-bash-or-other-languages-frameworks

但是,我无法使用建议的方法强制在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: ~/>$

虽然现在这对我来说可能不是问题,但在编写更复杂的脚本时,这肯定会让我失望。

1 个答案:

答案 0 :(得分:2)

shell arithmetic上的当前GNU Bash文档指出:

  

评估是在固定宽度的整数中完成的,没有检查溢出,但除以0被捕获并标记为错误。运算符及其优先级,关联性和值与C语言中的相同。

浮动点没有规定。

Korn shell和Zsh支持浮点运算。