为什么我不能从 setopt 中 grep zle?

Why can't I grep zle from setopt?

我偶然发现了这个,从那以后它就一直困扰着我:

% setopt
alwaystoend
autocd
autonamedirs
...
sharehistory
shinstdin
zle
%
% setopt | grep zle
# nothing printed
%
% setopt | cat -vet
alwaystoend$
autocd$
autonamedirs$
...
sharehistory$
shinstdin$
# no zle here!

如您所见,grep 未能检测到 zle,并且将 setopt 的输出通过管道传输到 cat 以检测任何不规则字符(不是它会更有意义)也没有显示 zle

man zshzle
...
 If  the  ZLE option is set (which it is by default in interactive shells) and the shell input
       is attached to the terminal, the user is able to edit command lines.

由于您将 setopt 的输出通过管道传输到进程,shell 关闭了命令行编辑。 (虽然文档的这一行仅涉及连接到终端的 shell 输入,但这抓住了问题的本质。没有什么有趣的事情发生,只是 shell 正在关闭该选项.