Zsh 是什么?解说开发者钟爱的理由及其与 Bash 的区别
在之前的系列文章中,我们学习了 Shell 中的王者“Bash”以及 Windows 的王牌“PowerShell”。相信您已经感受到命令行世界是多么强大,以及它所蕴含的能极大地提高工作效率的可能性。好了,这次作为本系列的收官之作,我们将为大家介绍一款被众多开发者誉为“一旦用上就回不去”的最强 Shell——“Zsh”。
特别是在 macOS 上,几年前 Zsh 就已被采纳为标准 Shell,对于 Web 开发者来说,它已成为一个无法回避的存在。“它和 Bash 有什么区别?”“为什么这么受欢迎?”我们将结合能让您亲身体验其具体功能和操作感的示例,通俗易懂地解答这些疑问。
如果说 Bash 是一辆性能可靠的家用轿车,那么 Zsh 就是一辆满载便捷功能、可自由定制的高级跑车。读完本文,您一定能发现 Zsh 的魅力所在,并从此爱上打开终端的感觉!
Zsh (Z Shell) 是什么?
Zsh 和 Bash 一样,是 Unix Shell 的一种。它在吸收了 Bash 优点的基础上,以增加和扩展更强大功能为目的而开发。因此,许多基本命令操作(如 ls, cd, rm 等)和管道(|)的用法与 Bash 几乎完全相同。您可以放心,您在 Bash 中学到的知识可以原封不动地用在 Zsh 上,把它看作是Bash 的上位兼容版也基本没问题。
那么,Zsh 受到开发者们压倒性支持的理由是什么呢?其秘密主要在于以下三个特点:
- 强大的补全功能: 减少命令输入错误,极大地提升速度。
- 贴心便捷的功能: 充满了诸如目录移动快捷方式等能“搔到痒处”的功能。
- 丰富的可定制性: 使用像“Oh My Zsh”这样的框架,可以随心所欲地无限扩展其外观和功能。
百闻不如一见,亲身体验其区别是最好的方式。在下一节中,让我们来看看 Zsh 惊人的功能吧。
体验 Zsh 的魅力!看懂它与 Bash 区别的便捷功能
在这里,我们将介绍 Zsh 众多便捷功能中,尤其容易上手的几个。请务必在您的终端(macOS 或已安装 Zsh 的 Linux 环境)上尝试一下。
1. 过于智能的“补全功能”
输入命令或文件名的开头部分后按 Tab 键来补全剩余部分,这个功能 Bash 也有。但是,Zsh 的补全功能要远比这强大得多。
例如,当您忘记 git 命令的某个选项时,可以尝试输入 git checkout - 然后按下 Tab 键。
$ git checkout -[按Tab键]
这时,所有可用的选项会连同说明一起列出,您可以用方向键进行选择。再也不需要去查手册了。
目录切换也变得更加智能。例如,当您想切换到一个路径很深的目录时,只需输入每级目录的首字母即可补全。
$ cd /u/l/b[按Tab键]
# 会自动补全为
$ cd /usr/local/bin/
2. 无需`cd`命令的目录切换
在 Zsh 中,如果启用了某项设置(setopt AUTO_CD),您只需输入目录名就可以像执行了 cd 命令一样进行切换。
$ ../../
# 移动到上两级目录
3. 功能强大的文件搜索(Globbing)
Globbing 是指使用通配符(如 *)进行文件名展开。在 Zsh 中,这项功能非常强大。
例如,如果您想在当前目录及其所有子目录中查找扩展名为 .html 的文件,可以这样写:
$ ls **/*.html
** 代表递归搜索。要在 Bash 中实现这个功能,需要进行一些额外的设置,稍微有些麻烦。
让 Zsh 变得最强的框架——“Oh My Zsh”
能将 Zsh 的潜力发挥到极致的,正是以 Oh My Zsh 为代表的“框架”。这是一个能让您轻松管理 Zsh 便捷设置、插件和主题的系统。
特别是安装了著名的 Oh My Zsh 之后,您可以立即享受到以下好处:
- 方便的别名: 例如,Git 操作中常用的
git status可以用gst执行,git push可以用gp执行,大大缩短了命令。 - 强化的 Git 集成: 当前所在的 Git 分支名和文件修改状态会一直显示在提示符(命令输入行)上,有助于防止操作失误。
- 丰富的主题: 您可以从数百种设计中,瞬间将提示符的外观更改为您喜欢的样式。
如果想自己完成这些设置会非常繁琐,但使用 Oh My Zsh,您可以在几分钟内就将全世界开发者创造的便捷设置据为己有。
与 Bash 的兼容性及编写脚本时的注意事项
正如我们目前所见,在交互式使用时,Zsh 几乎可以作为 Bash 的上位兼容版来使用。但是,在编写 Shell 脚本时,有一个需要注意的重要区别。
那就是数组索引的起始编号。
在 Bash 中 (索引从 0 开始):
#!/bin/bash
my_array=("apple" "banana" "cherry")
echo ${my_array[0]} # -> apple
在 Zsh 中 (索引从 1 开始):
#!/bin/zsh
my_array=("apple" "banana" "cherry")
echo $my_array[1] # -> apple
这个区别在用 Zsh 运行为 Bash 编写的脚本时,可能会导致意想不到的错误。因此,正确书写脚本第一行的 Shebang(如 #!/bin/bash),明确脚本预期的执行环境,就显得尤为重要。
总结
这次,我们解说了成为 macOS 标准、并深受众多开发者喜爱的 Shell——“Zsh”的魅力。
- 既能活用 Bash 的知识,又能使用更便捷的功能。
- 强大的补全功能可以减少输入量、防止失误。
- 通过 Oh My Zsh 等框架,可以随心所欲地定制外观和功能。
Zsh 是一个非常强大的工具,它能将日常的命令行工作从“枯燥的任务”变为“舒适而富有创造性的体验”。作为一名 Web 创作者,在无法回避服务器操作和 Git 等工具的今天,熟练使用 Zsh 将成为一大优势。
为了那些想“一定要在自己的环境里也装上 Zsh!”的读者,下一篇文章我们将具体解说在 macOS 和 Linux 上安装 Zsh 和 Oh My Zsh,并进行初始设置的步骤。敬请期待!