zsh
のように、コマンドラインで記述されたbash
コマンドでコメントを許可すると便利な場合がありますが、
% echo test # test
zsh: bad pattern: #
bash
シェルと同じ動作をする方法はありますか?
$ setopt interactive_comments
$ echo hello # comment
hello
zsh
シェルは、スクリプト(一般的に非インタラクティブシェル)でinteractive_comments
シェルオプションをデフォルトで有効にしますが、インタラクティブセッションを実行するときは有効にしません。
zsh
マニュアルの関連ビット:
COMMENTS
In non-interactive shells, or in interactive shells with the
INTERACTIVE_COMMENTS option set, a Word beginning with the third
character of the histchars parameter (`#' by default) causes that Word
and all the following characters up to a newline to be ignored.
このShellオプションを設定しないと、bad pattern
Shellオプションが設定されている場合にのみextended_glob
エラーが発生します。 extended_glob
を設定すると、x#
は0個以上のパターンx
に一致し、x##
は1つ以上のパターンx
に一致します(これらは対応します)正規表現修飾子*
および+
)に変更します。つまり、extended_glob
セットおよびinteractive_comments
nsetを使用すると、シェルは、知らないうちに使用した拡張ファイル名グロビングパターン修飾子で使用されている構文について文句を言っています。
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