我在会话-
中意外/实验性地输入了 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 通常会加载一些不同的启动文件。除了这种用法之外,-
修饰符实际上并没有做太多事情 - 特别是,-
在命令行上它本身只会修改一个空命令。该空命令反过来可能会触发一些钩子函数,但不会做太多其他事情。