2014-05-01 39 views
2
~ # echo "1.2>1.3" | bc 
syntax error on line 1, teletype 

我真的有兩個問題。首先,我想確認上述錯誤是由於我的bc版本不是GNU bc。bash 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

對我有用bc 1.06.95 版權所有1991-1994,1997,1998,2000,2004,2006自由軟件基金會有限公司 – Ashkan

+0

也適用於我與Ashkan(在Ubuntu上)同樣的版本, 'bc 1.06版權所有1991-1994,1997,1998,2000自由軟件基金會公司在OS X Mountain Lion上是GNU版本。 'bc -v'告訴你什麼版本?順便說一句,你在路上是正確的。如果您在互動模式下運行'bc'時嘗試進行測試,會發生什麼情況? – Tim

+0

你可以試試:'echo「if(1.2> 1.3)1 else 0」| bc'(即將比較結果作爲if)? –

回答

2

繼評論中的討論後,似乎你的系統仍然沒有使用最近的GNU實現bc。這意味着您無法使用符合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

我的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 
0

變化來自:

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

到:

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

您應該不要在PATH中添加bc命令。 PATH設置搜索文件夾的順序。