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)と呼ばれる機能があります。これは、!二重引用符で囲まれている場合でも、特別に処理します。

二重引用符を一重引用符に置き換えると役立つはずです(履歴の拡張はそこでは発生しません)。

また、履歴の拡張は非対話型シェルでは発生しません(つまり、例はスクリプトの場合と同じように機能します)。

于 2013-01-14T23:42:37.723 に答える
1

バッシュがあなたの「!」を解釈しているようです。ある種のコマンドとして。「for」を置き換えることは私にとってはうまくいきました。

これは、端末に何かを出力するときにも発生します。

$ echo "!"
-bash: !: event not found
$ echo '!'
!
于 2013-01-14T23:40:32.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 に答える