我只是想知道如何使用“bc”和 bash 中的条件语句检查浮点值是否在某个范围内。提前致谢
例如,我想知道 17.2 是否在 17.5 至 18.2 范围内。
最近了解到我可以使用 bc 来检查这样的语句:
if [ $(bc <<< "$result > 17.5") -eq 1 ]
曾尝试过if [ $(bc <<< "$result > 17.5") && $(bc <<< "$result <= 18.2") -eq 1 ]
但总是出现语法错误,而且不确定这是否是正确的表达式或语法。
答案1
您不能&&
在单方括号内使用。不过,您还有其他选择:
-a
在 内部使用[ ... ]
。if [ $(bc <<< "$result > 17.5") -eq 1 -a $(bc <<< "$result <= 18.2") -eq 1 ]
[[ ... ]]
使用支持双方括号&&
。if [[ $(bc <<< "$result > 17.5") == 1 && $(bc <<< "$result <= 18.2") == 1 ]]
[ ... ]
使用分隔的两个条件&&
。if [ $(bc <<< "$result > 17.5") -eq 1 ] && [ $(bc <<< "$result <= 18.2") -eq 1 ]
您可以对两个表达式的结果使用字符串比较
[[ $( bc <<< "$result > 17.5; %result <= 18.2" ) == $'1\n1' ]]
bc
&&
也理解:if [[ $(bc <<< "$result > 17.5 && $result <= 18.2") == 1 ]]
我更喜欢5。
答案2
Bash 无法处理浮点数。
首先我们要知道它们是否在范围内。如果为真 (1),则该数字在范围内:
test=$(echo "17.5<$result<18.2" | bc)
然后我们用 if 检查它是否正确。
if [ $test -eq 1 ]
then
echo true
else
echo false
fi