如果我在 zsh 中 echo $0 ,为什么 zsh (-zsh) 前面有一个破折号?

Wal*_*oss 8 shell zsh

如果在bash中我这样做(从命令行)

echo $0
Run Code Online (Sandbox Code Playgroud)

输出是

bash
Run Code Online (Sandbox Code Playgroud)

在其他 shell 中也是如此。

但是如果我在zsh中做同样的事情,输出是

-zsh
Run Code Online (Sandbox Code Playgroud)

为什么zsh前面有一个破折号?

che*_*ner 9

shell 之间的一个旧约定是,如果使用以 开头的名称调用 shell -,则它应该将自身初始化为登录 shell。zsh您的终端仿真器在为您执行时遵循此约定。

您可以使用内置-l标志 to来观察这一点(它在命令名称中添加前导)。zshexec-

% ( exec bash -c 'echo $0')
bash
% ( exec -l bash -c 'echo $0')
-bash
Run Code Online (Sandbox Code Playgroud)

前导的效果-一般相当于使用该-l选项运行 shell。