どういう意味ですか! 「?

どういう意味ですか! 「?

このコマンドはecho !"エラーメッセージを返します。しかし、コマンドはecho "Hello!"成功しました。コマンドが正しく使用されましたかecho "Hello!"

答え1

Bashを実行していると仮定すると、!トリガーは歴史的拡張。オンになっていて、たとえばを書くと、で始まる!echo最後のコマンドに置き換えられますecho。この機能はもともとcshで提供されており、他のシェルでそれをサポートしているかどうかはわかりません。

履歴拡張は最もスマートな機能ではありません。たとえば、!"常に失敗しているように見えても、これをトリガーします(実行して"echo" fooから試しても!"失敗します)。迷惑なことに、inなどの内部二重引用符もトリガーされますecho "!hello"。 Bash 3.2でもecho "hello!"トリガーされましたが、新しいバージョンではこれが変更されたようです。

私の提案はそれをオフにしてBashのスタートアップファイルにset +o histexpand入れることです。set +H

関連情報