2013-01-14 125 views
0

長話短說,是否有可能讓bc評估下列表達式?Bash bc計算器評估,多種條件未評估

echo "!(2.2 >= 0) && !(2.2 < 10)" | bc 
bash: !: event not found 

我知道這個工程:

echo "(2.2 >= 0) && (2.2 < 10)" | bc 
1 

那我做錯了嗎? bc手冊頁說它支持!expr,但我似乎無法調用它。我知道可以通過否定比較符號來解決問題,但我想知道在這種情況下應如何調用!expr

非常感謝。

回答

4
bash: !: event not found 

還有就是bash功能,被稱爲‘歷史擴展’(見man bash) :它處理!特別,即使在雙引號

更換用單引號雙引號應該幫助(歷史擴展不存在發生)

此外,歷史擴展不會發生在非交互式shell中(也就是說,您的示例將在腳本中按原樣運行)。

1

這似乎是bash解釋你的「!」作爲某種指令。更換「爲」爲我工作

時候才outputing東西終端這也恰好:

$ echo "!" 
-bash: !: event not found 
$ echo '!' 
! 
1

一個步行約與雙引號的bash:

[email protected]:/tmp$ echo -e "\x21(3>5)"|bc 
1 

下進行測試:

[email protected]:/tmp$ bash -version|head -1 
GNU bash, version 4.2.42(2)-release (i686-pc-linux-gnu) 
+0

ASCII十六進制,以防止 '!'評價?有趣。 –

+0

@ S.T.A.L.K.E.R。我使用這個技巧來避免在編寫sed行時出現「或者」。\ \ \「對很煩人。 – Kent