4

このコマンドラインが機能する理由:

$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output." ; fi

そして、これは私に奇妙な解析エラーを与えますか?

$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output!" ; fi
-bash: !": event not found

最初のバージョンからの唯一の変更点は、引用符の中にエコーされる文が感嘆符で終わることです。なぜBashは2番目のバージョンでそのエラーを私に与えるのですか?

重要な場合、これはbash --version:からの出力です。

GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
4

1 に答える 1

7

文字列を二重引用符ではなく一重引用符で囲むことができます。

感嘆符は、bashマニュアルで説明されている非常に便利な履歴拡張機能を呼び出します。

履歴拡張は、デフォルトである履歴拡張文字の出現によって導入さ!れます。とのみ\'履歴拡張文字をエスケープするために使用できます。

たとえば、単語で始まった最後のコマンドを実行するには、次のように入力しmysqlます。

!mysql

または、単語を含む最後のコマンドを実行するには、次のようgrepに入力します。

!?grep

このマニュアルには、履歴展開演算子bashの構文も記載されています。

于 2012-10-15T00:34:01.853 に答える