bash 可以在不使用外部命令的情况下进行浮点运算吗?

use*_*288 11 bash arithmetic floating-point

我读过bash可以在不使用外部命令的情况下进行整数运算,例如:

echo "$((3 * (2 + 1)))"
Run Code Online (Sandbox Code Playgroud)

能否bash也做浮点运算,而无需使用外部命令?

jes*_*e_b 22

不。

Bash 本身无法执行浮点运算。


这不是您要查找的内容,但可能会帮助其他人:

备择方案

  1. bc

bc允许浮点运算,甚至可以通过设置scale值将整数转换为浮点数。(请注意,该scale值仅影响内部除法,bc但解决方法是以除以 1 结束任何公式)

$ echo '10.1 / 1.1' | bc -l
9.18181818181818181818
$ echo '55 * 0.111111' | bc -l
6.111105
$ echo 'scale=4; 1 + 1' | bc -l
2
$ echo 'scale=4; 1 + 1 / 1' | bc -l
2.0000
Run Code Online (Sandbox Code Playgroud)
  1. awk

awk 本身是一种编程语言,但很容易被用来在 bash 脚本中执行浮点运算,但这还不是它所能做的全部!

echo | awk '{print 10.1 / 1.1}'
9.18182
$ awk 'BEGIN{print 55 * 0.111111}'
6.11111
$ echo | awk '{print log(100)}'
4.60517
$ awk 'BEGIN{print sqrt(100)}'
10
Run Code Online (Sandbox Code Playgroud)

我使用echo管道 toawk和 aBEGIN来展示两种方法。awk BEGIN语句中的任何内容都将在读取输入之前执行,但是没有输入或 BEGIN 语句awk将不会执行,因此您需要为其提供输入。


  1. Perl

另一种可以在 bash 脚本中使用的编程语言。

$ perl -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(perl -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
Run Code Online (Sandbox Code Playgroud)
  1. Python

另一种可以在 bash 脚本中使用的编程语言。

$ python -c 'print 10.1 / 1.1'
9.18181818182
$ somevar="$(python -c 'print 55 * 0.111111')"; echo "$somevar"
6.111105
Run Code Online (Sandbox Code Playgroud)
  1. Ruby

另一种可以在 bash 脚本中使用的编程语言。

$ ruby -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(ruby -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
Run Code Online (Sandbox Code Playgroud)