比較演算子を使用しようとしていますが、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文書には「任意の精度計算機」という同じ単語で説明されています。一部のディストリビューションでは同じパッケージで提供されますが、他のディストリビューションでは別々にパッケージ化されています。