允许在zsh
命令行上编写的命令中添加注释可能很有用,如 中所示bash
,但是
% echo test # test
zsh: bad pattern: #
有什么办法可以得到与 shell 中相同的行为吗bash
?
答案1
$ setopt interactive_comments
$ echo hello # comment
hello
默认情况下, shell在脚本(一般为非交互式 shell)中zsh
启用shell 选项,但在运行交互式会话时则不启用。interactive_comments
手册中的相关部分zsh
:
注释
在非交互式 shell 或具有INTERACTIVE_COMMENTS
选项集的交互式 shell 中,以 histchars 参数的第三个字符(默认情况下)开头的单词#
会导致该单词以及换行符之前的所有后续字符被忽略。
bad pattern
如果没有设置此 shell 选项,则只有在extended_glob
设置了 shell 选项时才会出现错误。使用extended_glob
set,x#
将匹配零个或多个模式x
,并x##
匹配一个或多个模式x
(这些对应于正则表达式修饰符*
和+
)。这意味着使用extended_glob
set 和interactive_comments
未设置,shell 抱怨您在不知情的情况下使用的扩展文件名通配模式修饰符中使用的语法。
中的值histchars
默认为!^#
,前两个字符用于历史扩展。
由于 中的注释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
shell 也有一个interactive_comments
shell 选项,但在交互式 shell 中默认打开此选项:
$ echo hello # hello
hello
$ shopt -u interactive_comments
$ echo hello # hello
hello # hello