在bash结果中比较float和integer变量一直在变化

时间:2018-05-02 08:36:22

标签: bash variables compare

我正在尝试使用以下命令作为示例来评估数组中的元素:

sorted=(0 0.0223611 0.977639)
if [[ $(echo "${sorted[-2]} > 0" | bc) ]];then echo 'yes';else echo 'no';fi

这将给出正确答案'是';但是,当我将'0'改为'0.8'时,

if [[ $(echo "${sorted[-2]} > 0.8" | bc) ]];then echo 'yes';else echo 'no';fi

它仍然给出相同的答案'是',这是不正确的。

在此之后,如果我将命令行更改为:

if [[ $(echo ${sorted[-2]} > 0.8 | bc) ]];then echo 'yes';else echo 'no';fi

答案是'不',这是正确的。但如果我改回0,答案仍然是'不'。

所以每次添加或删除双引号时,第一个答案都是正确的。但无论之后的浮动如何变化,它都不会改变。我完全迷失了这里发生的事情。请帮帮我。谢谢!

1 个答案:

答案 0 :(得分:0)

bc0打印为false,将1打印为true。 [[ 0 ]][[ 1 ]]都是正确的,但您可以将它们与1进行比较:

if [[ $( bc -l <<< "${sorted[-2]} > 0.8" ) = 1 ]]

或使用其中0为假且1(或任何其他数字)为真的算术表达式:

if (( $( bc -l <<< "${sorted[-2]} > 0.8" ) ))