我读过bash
可以在不使用外部命令的情况下进行整数运算,例如:
echo "$((3 * (2 + 1)))"
不使用外部命令也可以bash
进行浮点运算吗?
答案1
不。
Bash 本身无法执行浮点运算。
这不是您正在寻找的内容,但可能对其他人有帮助:
备择方案
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
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
我使用echo
Piped toawk
和 aBEGIN
来展示执行此操作的两种方法。语句中的任何内容awk
BEGIN
都将在读取输入之前执行,但是如果没有输入,则 BEGIN 语句awk
将不会执行,因此您需要为其提供输入。
Perl
另一种可以在 bash 脚本中使用的编程语言。
$ perl -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(perl -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
Python
另一种可以在 bash 脚本中使用的编程语言。
$ python -c 'print 10.1 / 1.1'
9.18181818182
$ somevar="$(python -c 'print 55 * 0.111111')"; echo "$somevar"
6.111105
Ruby
另一种可以在 bash 脚本中使用的编程语言。
$ ruby -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(ruby -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105
答案2
“bash 也可以在不使用外部命令的情况下进行浮点运算吗?”
没有。
robert@pip2:/tmp$ echo $((2.5 * 3))
bash: 2.5 * 3: syntax error: invalid arithmetic operator (error token is ".5 * 3")