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 不支持浮点运算。
但是,您可以使用bcwhich 是一个外部程序来进行算术运算。

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,您可以使用它来编写脚本而不是 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 回答