linux - bash 测试范围内的数字(带 float )

标签 linux bash shell

问题出在这一行

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: 你不需要 $( ) 两边的引号因为你只期待 01作为返回值

p/s2: $( ) 内可以有引号即使它包含在引号中,例如

"$(echo "1 + 2" | bc -l )" 

关于linux - bash 测试范围内的数字(带 float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952427/

相关文章:

regex - BASH:使用正则表达式从文件名的 dd_mm_yyy 获取日期

linux - 从在 Windows 上运行的 Jenkins 在 Linux 上创建 docker 容器

c - 在多线程服务器中使用 Pthread

linux - 删除目录中的旧文件

linux - 如何使用 shell 脚本增加版本号?

为文件/目录树创建结构

linux - jq 不使用感叹号作为输入

bash - “http_proxy”在 .curlrc 配置文件中具有不受支持的尾随

shell - 如何理解 ${CONFIG+x} 中的 x

linux - 使用自定义发件人 : and Cc: 发送电子邮件