bash bc无法比较数字

时间:2014-05-01 07:46:48

标签: bash

~ # echo "1.2>1.3" | bc
syntax error on line 1, teletype

我真的有两个问题。首先,我想确认上述错误是由于我所拥有的bc版本不是GNU bc这一事实引起的。

其次,GNU bc应该安装在我的系统中~cs9e-1 / bin / arch / sun4u / bc。我将该目录添加到$ PATH

的开头
PATH=~cs9e-1/bin/arch/sun4u/bc:$PATH

再次尝试上述比较。同样的错误。

我想也许我应该设置PATH = ~cs9e-1 / bin / arch / sun4u /:$ PATH而不是PATH = ~cs9e-1 / bin / arch / sun4u / bc:$ PATH。所以我做了那个,然后再次尝试上面的比较,这次收到一条新的错误信息:

-bash: /home/ff/cs9e-1/bin/arch/sun4u/bc: Invalid argument

我只是不知道这里发生了什么。

3 个答案:

答案 0 :(得分:2)

在评论中讨论后,您的系统似乎仍未使用bc的最新GNU实现。这意味着您无法对符合POSIX的bc使用任何扩展,并且使用ifwhile语句之外的比较或for检查,就是其中之一扩展。使用:

echo "if (1.2>1.3) 1" | bc

工作,因为它没有返回任何东西。将比较结果反转为<按预期返回1

请注意,使用else(例如echo "if ( 1.2>1.3 ) 1 else 0" | bc)也是一种扩展,POSIX标准bc不支持。

大多数描述超出POSIX标准的bc版本的手册页通常会很好地描述差异。例如,http://unixhelp.ed.ac.uk/CGI/man-cgi?bc+1有一个“差异”部分。

答案 1 :(得分:1)

不确定我的Linux机器上的bc问题是否返回0

您也可以使用awk进行计算

echo 1.2 |awk -v val="1.4" '{ if ($0 >= val) { print "bigger"; }else { print "smaller"; } }'
smaller

echo 1.2 |awk -v val="1.1" '{ if ($0 >= val) { print "bigger"; }else { print "smaller"; } }'
bigger

答案 2 :(得分:0)

从:改变:

PATH=~cs9e-1/bin/arch/sun4u/bc:$PATH

为:

PATH=/home/ff/cs9e-1/bin/arch/sun4u:$PATH

您不应在PATH中添加bc命令。 PATH设置搜索文件夹的顺序。

相关问题