対話型 zsh コマンドへのコメントの追加を許可する

対話型 zsh コマンドへのコメントの追加を許可する

に示されているように、zshコマンドラインに書かれたコマンドに説明を追加できるようにすることは便利です。bash

% echo test # test
zsh: bad pattern: #

シェルと同じ動作を得る方法はありますかbash

ベストアンサー1

$ setopt interactive_comments
$ echo hello # comment
hello

デフォルトでは、シェルはスクリプト(通常は非対話型シェル)でシェルオプションを有効にしますzshが、対話型セッションを実行してもアクティブではありません。interactive_comments

マニュアルの関連セクションzsh


非対話型シェルまたは INTERACTIVE_COMMENTSオプションセットを持つ対話型シェルでは、histchars引数の3番目の文字(デフォルト)で始まる単語は、その#単語と改行文字の前の後続のすべての文字を無視します。

bad patternこのシェルオプションを設定しないと、extended_globシェルオプションが設定されている場合にのみエラーが発生します。extended_glob設定すると、x#ゼロ個以上のパターンが一致し、x1つx##以上のパターンが一致しますx(これは正規表現修飾子*と等価です+)。これはextended_globsetとinteractive_comments 未設定、シェルは、ユーザーが知らない間に拡張ファイル名ワイルドカードパターン修飾子によって使用される構文について文句を言います。


デフォルト値histcharsはで、!^#最初の2文字は履歴拡張に使用されます。

のコメントは:zshで区切られているため、$histchars[3]この文字を変更するとコメントと見なされるテキストが変更されます。

$ setopt extended_glob
$ echo hello # hello : hello
zsh: bad pattern: #
$ unsetopt extended_glob
$ echo hello # hello : hello
hello # hello : hello
$ setopt interactive_comments
$ echo hello # hello : hello
hello
$ histchars[3]=:
$ echo hello # hello : hello
hello # hello

興味深いことに、(?)bashシェルにもinteractive_commentsシェルオプションがありますが、対話型シェルではこのオプションはデフォルトでオンになっています。

$ echo hello # hello
hello
$ shopt -u interactive_comments
$ echo hello # hello
hello # hello

おすすめ記事