0

コマンドの出力を格納する変数があります。フロートと比較するにはどうすればよいですか?

より具体的には、私がやっている

x=$(tail -n 1 foo| cut -d ' ' -f2)

if (($x < 0)); then ...

fooファイル名です。上記を実行すると、次のエラーが発生します

-0.08 < 0 : syntax error: invalid arithmetic operator (error token is "0.08 < 0")

比較する必要がある値は です-0.08が、エラー トークンが異なります

そのような比較のために私は何をすべきですか?

4

2 に答える 2

3

bash は浮動小数点演算をサポートしていません。
ただしbc、外部プログラムである which を使用して算術演算を行うことはできます。

if (( $(bc <<< "$x < 0") )); then 
    printf "%f is less than 0\n" "$x"; 
fi

マニュアルページから:

関係演算子は、

  expr1 < expr2
         The result is 1 if expr1 is strictly less than expr2.

  expr1 <= expr2
         The result is 1 if expr1 is less than or equal to expr2.

  expr1 > expr2
         The result is 1 if expr1 is strictly greater than expr2.

  expr1 >= expr2
         The result is 1 if expr1 is greater than or equal to expr2.

  expr1 == expr2
         The result is 1 if expr1 is equal to expr2.

  expr1 != expr2
         The result is 1 if expr1 is not equal to expr2.

awk浮動小数点演算もサポートする を使用することもできます。

于 2012-05-05T10:19:44.343 に答える
0

ksh を使用できる場合は、float をサポートしているため、Bash の代わりにそれを使用してスクリプトを作成できます。Zsh はフロートもサポートしています。

#!/usr/bin/ksh
x=$(tail -n 1 foo| cut -d ' ' -f2)

if ((x < 0))
then
    echo "less than"
fi
于 2012-05-05T11:20:59.143 に答える