zsh 是什么,和 bash 有什么区别

zsh 是一个为交互式使用而设计的 shell,同时也是一门功能完整的脚本语言。如果你每天在终端里敲大量命令、依赖 Tab 补全和提示符信息,zsh 通常比 bash 更省事;如果你主要运行现成的 bash 脚本、或在只装了 bash 的服务器上工作,切换的收益就没那么明显。两者都是 POSIX shell 的超集方向实现,日常命令大多通用,差异集中在交互体验和部分脚本语法上。

zsh 的定位

根据 zsh 官网的说明,zsh 是"为交互式使用而设计的 shell,尽管它同时也是一门强大的脚本语言"。这句话点出了它的两个身份:

  • 交互式 shell:你登录终端后直接面对的那层,负责补全、历史、提示符、通配等。
  • 脚本语言:可以写 .zsh 脚本,具备数组、关联数组、函数、条件表达式等能力。

它并不是要取代 bash 的"另一种 sh",而更像是在兼容常见 shell 语法的基础上,把交互体验做得更细。

和 bash 的主要差异

维度 zsh bash
补全 内置强大补全系统,可补全命令选项、路径、Git 分支等 补全能力较弱,常需 bash-completion 包扩展
通配(globbing) 支持扩展通配,如递归、按类型筛选 基础通配,扩展能力有限
提示符 内置主题与提示符扩展机制 需手动拼接 PS1
插件生态 有成熟的插件管理器与主题框架 生态相对分散
脚本兼容 与 POSIX sh / bash 有差异 更接近多数脚本的默认预期

需要说明的是,上表中"插件生态""主题框架"属于 zsh 社区长期形成的通用做法,官网本身只提供信息索引与发行版链接,不托管这些第三方项目。

常见使用场景

  • 本地开发终端:需要频繁补全、看 Git 状态、定制提示符时,zsh 的交互优势最明显。
  • 写交互辅助脚本:用 zsh 的数组和通配处理文件列表,比 bash 写法更短。
  • 服务器运维:如果目标机器只有 bash,或团队脚本统一按 bash 写,保持 bash 更省心。

上手方式

大致流程是:安装 → 设为默认 shell → 做基本配置。

  1. 安装:多数 Linux 发行版和 macOS 可通过系统包管理器安装;macOS 较新版本默认 shell 已是 zsh。
  2. 设为默认 shell:用 chsh -s $(which zsh) 之类的方式切换,重新登录后生效。具体命令随系统而异,切换前确认 zsh 已正确安装。
  3. 基本配置:zsh 启动时会读取配置文件(如 ~/.zshrc),提示符、别名、补全都写在这里。首次使用可先留空,逐步添加。

预期结果是:新开的终端进入 zsh,补全和提示符按你的配置生效。常见卡点是切换默认 shell 后某些依赖 bash 初始化脚本的环境变量没被加载,需要把相关配置迁移到 zsh 的配置文件里。

脚本兼容性注意事项

这是切换时最容易踩坑的地方:

  • shebang 决定解释器:脚本第一行 #!/bin/bash 就仍由 bash 执行,不会因为你的登录 shell 是 zsh 而改变。
  • 交互配置不等于脚本环境:~/.zshrc 只在交互式会话读取,脚本里不会自动加载。
  • 语法差异:数组下标、[[ ]] 内的某些行为、通配展开规则在两者间并不完全一致。把 bash 脚本直接当 zsh 脚本跑,可能得到不同结果。
  • 迁移建议:先在新脚本里用 zsh,旧脚本保持原解释器不动;确需迁移时逐段测试,而不是整体替换。

获取官方信息与发行版

zsh 官网(zsh.org)本身是一个信息与归档索引,提供指向各发行站点的链接。官网列出的分发渠道包括:

  • 美国(SourceForge,HTTPS)——同时提供常见问题页面
  • 芬兰(FTP / HTTP,Finnish University and Research Network)
  • 德国(FTP,Freie Universität Berlin)
  • 荷兰(HTTPS / FTP,Coloclue)——标注为主源站点
  • 波兰(FTP / HTTPS,华沙大学 ICM)

官网还提供邮件列表归档入口。页面信息显示,标注"5.9"的站点在 2022-10-08 时已知有当前版本;实际下载前建议以各站点页面为准核对版本。

结论

想要更好的交互体验、愿意花一点时间配置,选 zsh;需要最大脚本兼容性、或环境只提供 bash,继续用 bash。两者可以共存,切换默认 shell 不影响已有 bash 脚本的执行。

zsh.org