允许在交互式 zsh 命令中添加注释

允许在交互式 zsh 命令中添加注释

允许在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_globset,x#将匹配零个或多个模式x,并x##匹配一个或多个模式x(这些对应于正则表达式修饰符*+)。这意味着使用extended_globset 和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

有趣的是(?),bashshell 也有一个interactive_commentsshell 选项,但在交互式 shell 中默认打开此选项:

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

相关内容