Zsh shell

杨镇源 于 2025-06-15 发布 浏览量

Zsh 常用快捷键(基于 macOS)

控制键(Ctrl, ⌃)快捷键

快捷键 功能说明
⌃ + U 清空当前行
⌃ + A 移动到行首
⌃ + E 移动到行尾
⌃ + F 向前移动
⌃ + B 向后移动
⌃ + P 上一条命令
⌃ + N 下一条命令
⌃ + R 搜索历史命令
⌃ + Y 召回最近删除的文字
⌃ + H 删除光标前的字符
⌃ + D 删除光标所在字符
⌃ + W 删除光标前的单词
⌃ + K 删除从光标到行尾的内容
⌃ + T 交换光标与前一个字符的位置
⌃ + L 清屏(等效于 clear 命令)

命令键(Command, ⌘)快捷键

快捷键 功能说明
⌘ + Click 打开文件、文件夹或链接
⌘ + N 新建终端窗口
⌘ + T 新建标签页
⌘ + W 关闭当前标签页
⌘ + 数字 切换标签页
⌘ + ←/→ 左右切换标签页
⌥⌘ + 数字 切换终端窗口
⌘ + Enter 切换全屏
⌘ + D 左右分屏
⇧⌘ + D 上下分屏
⌘ + ; 自动补全历史记录
⇧⌘ + H 自动补全剪贴板历史
⌥⌘ + E 查找所有内容以定位标签页
⌘ + R 清屏(与 ⌃ + L 相同)
⌘ + / 显示光标位置
⌥⌘ + B 启用历史回放
⌘ + F 查找终端内容并使用 Tab/⇧Tab 补全

Zsh 是什么

Zsh(Z Shell)是一个功能强大的交互式 Shell,由 Paul Falstad 于 1990 年创建。它兼容 Bash,大部分 Bash 命令和脚本都能在 Zsh 中运行。与注重可移植性的 Bash 不同,Zsh 强调用户体验,提供智能补全、拼写纠正、可定制提示符和丰富的插件生态。

Bash(Bourne Again Shell)是 GNU 项目的一部分,于 1989 年发布,重点在于 POSIX 标准的兼容性和跨平台一致性。

从 macOS Catalina 开始(2019),Apple 将 Zsh 设为默认登录 Shell。原因主要包括:

因此,Apple 鼓励用户向 Zsh 迁移。

Zsh 的特性(相比 Bash )

快速定制提示符

Zsh 比 Bash 提供更灵活的提示符配置方式。示例如下:

Bash:

PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

PS1 是 Bash 中的一个 环境变量,表示 主提示符(Primary Prompt String),即你在终端里输入命令前看到的那一行提示。在 Zsh 中,则是PROMPT / PS1

Zsh:

PROMPT="%F{green}%n@%m %F{blue}%~ %f$ "

Zsh 支持 %n(用户名)、%m(主机名)、%~(当前目录)等,并可结合 Oh My Zsh 等插件系统实现主题和状态提示,非常适合个性化定制。


原生支持关联数组

Zsh 和 Bash 4.0+ 都支持关联数组,但 Zsh 在兼容性和语法上更灵活。

Zsh 示例:

typeset -A my_assoc_array
my_assoc_array[key1]=value1
echo $my_assoc_array[key1]

Bash 示例(仅限 4.0+):

declare -A my_assoc_array
my_assoc_array[key1]=value1
echo "${my_assoc_array[key1]}"

Zsh 允许更多类型作为键,默认数组索引从 1 开始(可改为 0)。


扩展的通配模式(glob)

Zsh 支持更强大的 glob 模式匹配:

Zsh 启用扩展 glob:

setopt extended_glob
txt_files=(*.txt)
non_log_files=^(*.log)

Bash 等效:

shopt -s extglob
txt_files=(*.txt)
non_log_files=!(*.log)

Zsh 还支持 **/ 进行递归目录匹配、排除匹配(~ 或 ^),操作灵活直观。


高级参数扩展

Zsh 支持间接变量引用和字符串处理的高级语法。

间接引用:

Zsh:

name=USER
USER=Alice
echo ${(P)name}  # 输出 Alice

Bash 中则为:

name=USER
USER=Alice
echo "${!name}"  # 输出 Alice

字符串处理(Zsh):

file="archive.tar.gz"
echo ${file:r}   # 输出 archive.tar
echo ${file:e}   # 输出 gz

Zsh 的参数扩展语法更丰富,适合写简洁高效的脚本。

Zsh 还是 Bash?

比较维度 Zsh Bash
默认系统支持 macOS Catalina+ 默认 Shell 大多数 Linux 默认 Shell
可移植性 略逊于 Bash(不一定预装) 高,跨平台兼容性强
脚本语法 丰富灵活,非 POSIX 兼容特性多 更贴近 POSIX 标准
插件生态 丰富(Oh My Zsh、zinit、Prezto) 相对较少
定制体验 极强(主题、补全、提示符) 较弱
上手难度 稍高 易于入门