问题出在这一行
elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 && "$(echo $a '<' $v08 | bc -l)" -eq 1 ];then
如何测试数字是否在范围内? 我知道可能还有其他解决方案,但我想用 bc 以这种方式解决...
a=0.1
v06=0.6
v08=0.8
if [ "$(echo $a '<' $v06 | bc -l)" -eq 1 ];then
echo " <0.6"
elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 && "$(echo $a '<' $v08 | bc -l)" -eq 1 ];then
echo " <0.6 >0.8"
else
echo ">1.5"
fi
最佳答案
实际上唯一的错误是你使用了&&
里面[ ]
这是行不通的。
只有 [[ ]]
可以包含 &&
对于多个测试条件。
你可以把&&
而不是在外面,像这样
elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 ] && [ "$(echo $a '<' $v08 | bc -l)" -eq 1 ]; then
或者甚至更好,
elif [ $(echo "($a > $v06) && ($a < $v08)" | bc -l) -eq 1 ]; then
自 bc
实际上支持 (num1 > num2) && (num1 < num3)
符号
p/s: 你不需要 $( )
两边的引号因为你只期待 0
或 1
作为返回值
p/s2: $( )
内可以有引号即使它包含在引号中,例如
"$(echo "1 + 2" | bc -l )"
关于linux - bash 测试范围内的数字(带 float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952427/