这类似于关于求两个数的最小值/最大值的问题,但我有兴趣对浮点数做同样的事情。
所以基本上我想用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