0

长话短说,是否可以让 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

3 回答 3

4
bash: !: event not found

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

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

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

于 2013-01-14T23:42:37.723 回答
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) 
于 2013-01-14T23:47:31.440 回答
1

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

当只是向终端输出一些东西时也会发生这种情况:

$ echo "!"
-bash: !: event not found
$ echo '!'
!
于 2013-01-14T23:40:32.723 回答