【问题标题】:compare float and integer variable in bash results change all the time比较bash结果中的浮点和整数变量一直在变化
【发布时间】:2018-05-02 08:36:21
【问题描述】:

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

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,答案仍然是“否”。

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

【问题讨论】:

    标签: bash variables compare


    【解决方案1】:

    bc 打印 0 为假,1 为真。 [[ 0 ]][[ 1 ]] 都是 true,但你可以将它们与 1 进行比较:

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

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

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

    【讨论】:

    • 谢谢!我以前不知道这些表达方式。但是我这里有个问题:我注意到现在有一​​个答案消失了,那就是:如果 [[ "${sorted[-2]}" > 0 ]] 我不明白为什么会被删除。这个有问题吗?我发现它适用于我的数据。
    • @carolynzy:使用字符串进行数字比较是错误的。 [[ 33 &gt; 4 ]] 为假,[[ .09 &gt; 0.8 ]] 为真。
    • 再次感谢您!你真有耐心!我确实需要赶上基本知识。从生物学背景转移到生物信息并不容易!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2017-11-19
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2016-05-24
    • 2016-02-08
    相关资源
    最近更新 更多