~ # 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
我只是不知道这里发生了什么。
答案 0 :(得分:2)
在评论中讨论后,您的系统似乎仍未使用bc
的最新GNU实现。这意味着您无法对符合POSIX的bc
使用任何扩展,并且使用if
或while
语句之外的比较或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设置搜索文件夹的顺序。