下面的比较浮点值命令在 bash 中工作正常,但在 AIX 上的 ksh 中不起作用。
if (( $(bc <<< " 5.3 >= 5.3") ));then echo "hi";else echo "bye";fi`,
我尝试了很多方法,有人可以建议我实现这一目标吗?
答案1
与所有其他运算符不同,关系运算符(“<”、“>”、“<=”、“">=”、“==”、“!=”)仅作为 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 。stdout
bye
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