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

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

我在会话-中意外/实验性地输入了 azsh并按了回车键。什么也没发生。

% -
% -
% echo $?
0

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

% which -
% where -
%

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

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

%# -
bash: -: command not found

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

% 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*

答案1

这就是zsh所谓的“预命令修饰符”。从文档

-    The command is executed with a ‘-’ prepended to its argv[0] string.

还有一些其他的预命令修饰符,例如noglob和。这个修饰符用于非常特殊的用例,当以或或类似名称builtin调用时,某些 shell 将充当登录 shell :-bash-ksh

bash -c 'echo $0'
# => bash
- bash -c 'echo $0'
# => -bash

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

还有更多信息这里这里

相关内容