长话短说,是否可以让 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 。
非常感激。
bash: !: event not found
有一个特性bash
,称为“历史扩展”(请参阅man bash
):它会!
特别处理,即使在双引号内也是如此。
用单引号替换双引号应该会有所帮助(那里不会发生历史扩展)。
此外,历史扩展不会发生在非交互式 shell 中(也就是说,您的示例将在脚本中按原样工作)。
带双引号的 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)
似乎 bash 正在解释您的“!” 作为某种命令。替换“ for ' 对我有用。
当只是向终端输出一些东西时也会发生这种情况:
$ echo "!"
-bash: !: event not found
$ echo '!'
!