kshで2つの浮動小数点値を比較するには?

kshで2つの浮動小数点値を比較するには?

浮動小数点値を比較する次のコマンドは bash ではうまく機能しますが、AIX の ksh では機能しません。

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

私はいくつかの方法を試しましたが、誰でもこれを達成する方法を提案できますか?

答え1

~によるとBCのPOSIX規格:

他のすべての演算子とは異なり、関係演算子 ("<", ">", "<=", "">=", "==", "!=") は if、while、または for ステートメントでのみ使用されます。 。

これは、単純な比較でtrueまたはfalseを評価できる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=false および1=true

答え3

このユーティリティを使用して、シェルdcで操作を実行できます。 $ n1> = $ n2の場合、mathコマンドはを印刷し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

関連情報