floatとbcを比較すると構文エラーが発生します。

floatとbcを比較すると構文エラーが発生します。

比較演算子を使用しようとしていますが、bc「ライン1のstdinの構文エラー」エラーが発生します。 kornは浮動小数点をうまく処理できないため、kornスクリプトで比較機能を使用する必要があります。使用例は次のとおりです。

echo "scale=2; 3.2 > 3" | bc

答え1

bcあなたがすることはPOSIXと互換性がなければなりません。ただし、bcは比較的ほとんど使用されないツールであり、一部の実装にはバグがある可能性があります。合計比較よりも高度な数学関数を使用しない場合は、A、W、およびKの元の実装でも浮動小数点演算をサポート+-*/できます。awk

echo 3.2 | awk '{exit !($0 > 3)}'

答え2

exprはこのような浮動小数点比較を処理できます。

ksh -c '(( $(expr 3.2 \> 3) == 1 )) && echo 1 || echo 0'

または、次のスクリプトで使用します。

#!/usr/bin/ksh

if [ $(expr $1 \> $2) == 1 ]; then
    echo "greater"
else 
    echo "lesser"  
fi

上記で使用したbcラインはLinuxでは動作しますが、Solarisでは動作しないため、exprの移植性に優れています。 exprを使用すると、両方のオペレーティングシステムで同じように機能します。

答え3

可能であれば試してみてください。dc:

echo "2 k 3.2 3 [1p] sa <a" | dc

上記のコードでは、最初の数字(上記の例では3.2)が2番目の数字(上記の3.2)より大きい場合、2小数点精度を使用して1を出力します。しかし、そうでなければ何も出力されません。

dcはいbc、GNU文書には「任意の精度計算機」という同じ単語で説明されています。一部のディストリビューションでは同じパッケージで提供されますが、他のディストリビューションでは別々にパッケージ化されています。

関連情報