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

7
如果在命令行中使用bash,我执行以下操作:
echo $0

输出结果为:

bash

类似地,在其他 shell 中也是如此。

但如果我在 zsh 中执行相同的操作,则输出为:

-zsh

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

你的登录壳是zsh吗? - glenn jackman
@glennjackman,这是我的登录shell,在Mac上我也会得到相同的-zsh提示。 - Josh Beauregard
前导破折号是一种旧的惯例;使用以“-”开头的名称调用shell表示它是一个登录shell(基本上等同于zsh -l)。您的终端仿真器正在遵循这个惯例。 - chepner
1个回答

8
一个古老的惯例是,如果shell的名称以-开头,那么它应该将自己初始化为登录shell。当终端仿真器为您执行zsh时,它遵循这个惯例。
您可以使用zsh内置的exec命令的-l标志来观察这一点(它在命令名称前添加一个前导-)。
% ( exec bash -c 'echo $0')
bash
% ( exec -l bash -c 'echo $0')
-bash

在大多数情况下,前导 - 的效果相当于使用 -l 选项运行 shell。


POSIX的exec没有选项。Bash的exec有选项 - 我以前没有查看过它是否有选项。您还可以使用exec -lbash之前添加破折号。 - Jonathan Leffler
用户指定了zsh作为他们的登录shell,因此可以安全地假设exec -a可用于演示目的,以展示如何设置$0的值。(虽然我不知道-l,但那更简单。) - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接