我需要在脚本中添加一些实数。我尝试过:
let var=2.5+2.5
这给了我一个错误 - 无效的算术运算符然后我尝试:
let var=2,5+2,5
这并没有给我一个错误,但在这种情况下它给了我一个错误的结果 -2。
为什么?如何使用 let 或其他命令添加实数?
答案1
第一个变体(let var=2.5+2.5
)不起作用,因为 bash 不支持浮点。
第二种变体 ( let var=2,5+2,5
) 有效,但这可能不是您想要的,因为逗号在这种情况下有另一个含义:它是一个分隔符,命令分隔符。因此,在这种情况下,您的命令与以下三个命令等效:
let var=2
let 5+2
let 5
这些都是有效的,因此您得到了var=2
。
但好消息是,你可以使用它bc
来实现你的愿望。例如:
var=$(bc <<< "2.5+2.5")
或者awk
:
var=$(awk "BEGIN {print 2.5+2.5; exit}")
或者perl
:
var=$(perl -e "print 2.5+2.5")
或者python
:
var=$(python -c "print 2.5+2.5")
答案2
Bash 不处理浮点运算。
如果你确实需要 fp 算法,请使用bc
或dc
。例如,
var=$(bc <<< "2.5+2.5")
echo "$var"
将输出5.0
,或dc
(很有趣,它是逆波兰表示法):
var=$(dc <<< "2.5 2.5 + p")
echo "$var"
也会输出5.0
。
答案3
zsh 是另一个不同于 bash 的 shell,它允许在 shell 中使用浮点数。如果您使用 zsh 而不是 bash(它支持let
使用浮点数),则无需修改脚本。只需使用安装它sudo apt-get install zsh
,然后在脚本中使用 shebang#!/usr/bin/zsh
或使用 shell 即可。演示:
➜ ~ let var=2.5+2.5
➜ ~ echo $var
5.0000000000
该脚本应该可以正常工作,因为 zsh 实现了 bash 具有的所有功能以及更多功能。您的第二个示例将无法工作,因为逗号 (,) 被 shell 解释为分隔符。它指示使用let
andvar=2
5+2
执行命令2
。