长话短说,有可能让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 。
非常感谢。
答案 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)