浮動小数点値を比較する次のコマンドは 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を表示します。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