zsh 中的“-”(破折号)命令是什么?

Ken*_*ams 11 zsh

我不小心/实验性地-zsh会话中输入了 a 并按了回车键。什么都没发生。

% -
% -
% echo $?
0
Run Code Online (Sandbox Code Playgroud)

通常的方法并没有告诉我它是什么:

% which -
% where -
%
Run Code Online (Sandbox Code Playgroud)

这是做什么的,它是在哪里定义的?

在 中bash,我收到了预期的错误:

%# -
bash: -: command not found
Run Code Online (Sandbox Code Playgroud)

它似乎不像是一个棘手的可执行文件[

% ls /bin                  
[*              dash*           expr*           ln*             pwd*            stty*           zsh*
bash*           date*           hostname*       ls*             realpath*       sync*
cat*            dd*             kill*           mkdir*          rm*             tcsh*
chmod*          df*             ksh*            mv*             rmdir*          test*
cp*             echo*           launchctl*      pax*            sh*             unlink*
csh*            ed*             link*           ps*             sleep*          wait4path*
Run Code Online (Sandbox Code Playgroud)

Gai*_*owl 17

这就是zsh所谓的“前置命令修饰符”。来自文档

\n
-    The command is executed with a \xe2\x80\x98-\xe2\x80\x99 prepended to its argv[0] string.\n
Run Code Online (Sandbox Code Playgroud)\n

还有一些其他预命令修饰符,例如noglobbuiltin。这是针对一个非常具体的用例,其中一些 shell 在被调用为-bash-ksh或类似的东西时将充当登录 shell:

\n
bash -c \'echo $0\'\n# => bash\n- bash -c \'echo $0\'\n# => -bash\n
Run Code Online (Sandbox Code Playgroud)\n

通过破折号,shell 通常会加载一些不同的启动文件。除了这种用法之外,-修饰符实际上并没有做太多事情 - 特别是,-在命令行上它本身只会修改一个空命令。该空命令可能会触发一些钩子函数,但不会做太多其他事情。

\n

这里这里有更多信息。

\n