为什么 let 命令不能用于添加实数?

为什么 let 命令不能用于添加实数?

我需要在脚本中添加一些实数。我尝试过:

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 算法,请使用bcdc。例如,

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 解释为分隔符。它指示使用letandvar=2 5+2执行命令2

相关内容