如何比较 ksh 中的两个浮点值?

如何比较 ksh 中的两个浮点值?

下面的比较浮点值命令在 bash 中工作正常,但在 AIX 上的 ksh 中不起作用。

if (( $(bc <<< " 5.3 >= 5.3") ));then echo "hi";else echo "bye";fi`,

我尝试了很多方法,有人可以建议我实现这一目标吗?

答案1

根据BC 的 POSIX 标准

与所有其他运算符不同,关系运算符(“<”、“>”、“<=”、“">=”、“==”、“!=”)仅作为 if、while、或在 for 语句内。

它似乎是一个 GNU/Linux 扩展,允许通过简单比较来评估真或假。

不用检查 bc 的输出是否为 1 或 0,而是test直接使用:

if [ 5.3 -ge 5.3 ]; then echo hi; else echo bye; fi

或使用算术扩展(ksh93):

if (( 5.3 >= 5.3 )); then echo hi; else echo bye; fi

或使用 awk:

if awk -v x=5.3 -v y=5.3 'BEGIN { exit (x >= y) ? 0 : 1 }'; then echo hi; else echo bye; fi

答案2

您还可以像这样检查值:

$ fat=5.3
$ slim=5.3
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'=='$slim |bc -l
1

输出:0=假和1=真

答案3

您可以使用该实用程序在 shell 中dc执行操作。当 $n1 >= $n2 时,math该命令将打印 a hi,否则将显示 a 。stdoutbye

n1=5.3 n2=5.3
dc -e "[[hi]]sa [r]sb $n1 $n2 !>a [bye] z2=bp"

       $n1  $n2   o/p
 1.    5.3, 5.3 => hi
 2.    5.3, 5.2 => hi
 3.    5.3, 5.4 => bye

相关内容