Bash bc计算器评估,带有NOT评估的多个条件

时间:2013-01-14 23:34:06

标签: bash bc

长话短说,有可能让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

非常感谢。

3 个答案:

答案 0 :(得分:4)

bash: !: event not found

bash有一项功能,称为“历史记录扩展”(请参阅​​man bash):它会特别处理!,即使在双引号内也是如此。

用单引号替换双引号应该有帮助(那里不会发生历史扩展)。

此外,历史记录扩展不会发生在非交互式shell中(也就是说,您的示例将在脚本中工作)。

答案 1 :(得分:1)

似乎bash正在解释你的“!”作为某种命令。替换“for”对我有用。

当只是向终端输出内容时也会发生这种情况:

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

答案 2 :(得分:1)

双击引用bash:

kent@7pLaptop:/tmp$ echo  -e "\x21(3>5)"|bc
1

在以下测试:

kent@7pLaptop:/tmp$ bash -version|head -1
GNU bash, version 4.2.42(2)-release (i686-pc-linux-gnu)