Unix命令在减法后返回两个中的最大浮点值

Unix命令在减法后返回两个中的最大浮点值

这类似于关于求两个数的最小值/最大值的问题,但我有兴趣对浮点数做同样的事情。

所以基本上我想用shell算术扩展使用三元运算符,但它仅适用于整数。

例如,我想取两个数字并减去一些数字,然后检查结果是否大于零,如果不是,请将其设置为大于零。

整数

这很好用:

value=5
echo $(( $(bc <<< "$value - 10") > 0 ? $(bc <<< "$value - 10") : 1 ))

1并按预期返回。

花车

但是,当我尝试将其转换为浮点比较时,它不起作用,例如

value=0.5
echo $(( $(bc <<< "$value - 0.8") > 0 ? $(bc <<< "$value - 0.8") : 0.1 ))

这给出了错误:

-bash: -.3 > 0 ? -.3 : 0.1 : syntax error: operand expected (error token is ".3 > 0 ? -.3 : 0.1 ")

尽管bc返回正确的浮点数:

$ echo $(bc <<< "$value - 0.8")
-.3

我认为 bash 无法处理这种浮点比较。

是否有任何简单的解决方法可以获取浮点数的最小值/最大值(如上所述)?

答案1

bc好的,我通过比较值想出了这个简单的单行代码,然后由 shell 完成其余的工作:

$ value=0.5
$ [ $(bc <<< "$value - 0.8 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.8") || echo 0.1
0.1
$ [ $(bc <<< "$value - 0.2 > 0") -eq 1 ] && echo $(bc <<< "$value - 0.2") || echo 0.1
.3

或者使用bc它本身,例如

v=0.5
bc <<< "if ($v-0.8>0) $v-0.8 else 0.1" # Result: .1
bc <<< "if ($v-0.2>0) $v-0.2 else 0.1" # Result: .3

相关内容