我有一个存储命令输出的变量。如何将它与浮点数进行比较?
更具体地说,我正在做
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
,但错误标记是不同的
我应该怎么做这样的比较?
答案 0 :(得分:3)
bash不支持浮点算术。
但是,您可以使用bc
这是一个外部程序来进行算术运算。
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
。
答案 1 :(得分:0)
如果您可以使用ksh,则可以使用它来编写脚本而不是Bash,因为它支持浮点数。 Zsh还支持花车。
#!/usr/bin/ksh
x=$(tail -n 1 foo| cut -d ' ' -f2)
if ((x < 0))
then
echo "less than"
fi