Zsh
一款极其强大的 Shell,原生支持极强的路径补全、拼写纠错和高度可定制的提示符。
#status / growing
#type / concept
#tech / ops
#resource / zsh
#media / website
Zsh
一句话定义
Zsh(Z Shell)是一个兼容 Bash 的 Unix 命令行 Shell,以强大的自动补全、拼写纠错、主题系统和插件生态著称,是 macOS 的默认 Shell。
核心机制 / 工作原理
Zsh 是 Bourne Shell(sh)家族的扩展,继承了 Bash 的绝大部分语法,同时在交互体验上做了大量增强。它通过模块化系统(zshmodules)加载功能,核心引擎处理命令解析,而补全、高亮、提示符等功能由独立模块提供。
Zsh 相比 Bash 的关键增强
补全系统
- Tab 补全:支持命令、路径、选项、参数的智能补全,可补全 git 分支名、ssh 主机名、kill 进程名等。
- 菜单选择:按 Tab 后出现可交互的选择列表,用方向键导航。
- 模糊匹配:输入
cd /u/l/b可补全为cd /usr/local/bin。
Globbing 与通配符
**/*.js— 递归匹配所有 JS 文件*(.)— 只匹配文件(不包括目录)*(m-7)— 匹配 7 天内修改过的文件
提示符(Prompt)
- 支持右提示符(RPROMPT),左侧输入命令,右侧显示 git 分支/时间等。
- 主题系统:内置多种 prompt 主题,社区主题(Powerlevel10k 等)更丰富。
- 动态信息:git 状态、退出码、执行时间等可实时显示在提示符中。
其他特性
- 拼写纠错:
git stauts自动提示”did you mean git status?” - 共享历史:多个终端窗口共享命令历史,支持去重。
- 目录栈:
pushd/popd增强,cd -快速切换最近目录。 - 变量展开:
${var:u}转大写,${var:l}转小写,${(j.-.)array}数组拼接。
Oh My Zsh 生态系统
Oh My Zsh 是 Zsh 的配置管理框架,提供:
- 主题:150+ 内置主题(agnoster、robbyrussell 等)。
- 插件:300+ 内置插件(git、docker、kubectl、zsh-autosuggestions 等)。
- 一键安装:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
替代方案:prezto(更轻量)、zinit(更快的插件管理器)、starship(跨 Shell 提示符)。
与 Bash 的兼容性
- Zsh 兼容 POSIX sh 和大部分 Bash 脚本,但有差异:
- 数组索引从 1 开始(Bash 从 0 开始)。
${var:0:3}在 Zsh 中可能行为不同。[[ ]]条件表达式语法略有差异。
emulate bash可临时切换到 Bash 兼容模式。- 系统脚本(
#!/bin/sh)不建议用 Zsh 语法。
常见使用场景
- 日常开发终端:配合 Oh My Zsh + 插件,极大提升交互效率。
- macOS 默认 Shell:从 macOS Catalina 起取代 Bash 成为默认 Shell。
- 服务器管理:交互式操作补全减少输入错误。
最小例子
# 安装 Zsh
sudo apt install zsh # Debian/Ubuntu
brew install zsh # macOS
# 设置为默认 Shell
chsh -s $(which zsh)
# 安装 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"