
に示されているように、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#
ゼロ個以上のパターンが一致し、x
1つx##
以上のパターンが一致しますx
(これは正規表現修飾子*
と等価です+
)。これはextended_glob
setと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