关于macOS Terminal中当前使用Shell的确认及基础编程影响的疑问
关于macOS Terminal中当前使用Shell的确认及基础编程影响的疑问
嘿,我来帮你把这个Shell的小困惑掰扯明白!很多刚接触macOS Terminal的同学都会遇到这个问题,别担心,其实逻辑简单得很~
一、你当前实际在用的Shell是什么?
当你在Terminal里输入bash后,顶部显示“bash”,这时候你确实正处在bash的环境里——相当于你从默认的zsh中启动了一个bash子进程,现在所有输入的命令都是由bash来执行的。
要100%确认当前运行的Shell,别用echo $SHELL,改用这个命令更靠谱:
echo $0
这个命令会输出当前正在运行的Shell进程名称:
- 刚打开Terminal还没输入
bash时,执行它会输出zsh(因为现在macOS的默认登录Shell是zsh) - 输入
bash后再执行,就会输出bash,这才是当前真正生效的Shell。
二、为什么echo $SHELL还是显示zsh?
这是最容易搞混的点!$SHELL这个环境变量记录的是你的系统默认登录Shell——也就是每次打开Terminal时,系统自动启动的那个Shell。哪怕你手动切换到bash子进程,这个变量也不会跟着变,它只会指向你设置的默认Shell(macOS默认是zsh)。
打个比方:你默认坐的是zsh的椅子,临时换到bash的椅子上,但系统记录的“默认椅子”还是zsh,$SHELL就是用来告诉你这个默认值的。
三、对于基础编程来说,选bash还是zsh重要吗?
负责任地说:完全不重要。
- 基础编程用到的绝大多数命令(比如
cd、ls、gcc、python、npm这些)都是POSIX标准的,bash和zsh都完美支持。 - 哪怕你要写简单的Shell脚本(比如批量重命名文件、运行编译命令的小脚本),只要是基础语法,两个Shell也都能正常执行。
当然,zsh有一些额外的便利功能(比如更智能的自动补全、好看的主题插件),但对于刚学编程的你来说,这些都是锦上添花的东西,完全不影响核心的编程操作。
小补充:如果想切换默认Shell怎么办?
要是你真的想把默认Shell改成bash,可以在Terminal里执行:
chsh -s /bin/bash
执行后重启Terminal,下次打开就会默认进入bash了。不过要注意,macOS自带的bash版本比较老(受GPL协议限制),zsh其实是苹果现在主推的,功能也更现代化,你可以慢慢试试~




