ZSH は、前に感嘆符 (!) がある場合、終了しない参照とみなします。

ZSH は、前に感嘆符 (!) がある場合、終了しない参照とみなします。

zsh 5.3(oh-my-zsh経由)があり、実行すると、次の行echo --message="foo!"に終了していない参照プロンプトが表示されます。

$ echo --message="foo!"
dquote>

これはbashでは発生しません。

!パラメータから役割を削除すると正常に動作します。

$ echo --message="foo"
--message=foo

ここで何が起こっているのでしょうか?


また、終了していない見積もりプロンプトに応答して"Enterキーを押すと、次の出力が表示され、完全に削除されます!

$ echo --message="foo!"
dquote> "
--message=foo

答え1

これが歴史的な拡張です。

zshexpn(1)マンページではこれを次のように説明します。

シェルが!"入力で一連の文字を検出すると、zshmisc(1)現在のリストが完全に解析されるまで、記録メカニズムは一時的に無効になります(参考文献を参照)。!"入力から削除され、以降の文字!は特に意味がありません。

関連情報