2013-01-14 90 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