为您的系统选择正确的 shell 可能是一项艰巨的任务。 有很多选择,具有不同的特性和功能。 两个最流行的 shell 是 Zsh 和 Bash。 这两种 shell 都很强大,各有优缺点。 在本文中,我们将比较 Zsh 与 Bash 以确定哪一个更适合您的系统。
目录
Zsh 概述
Zsh 是一个功能强大且高度可定制的 Unix shell。 它具有多种功能,使其成为用户的有吸引力的选择。 Zsh 的一些关键特性包括拼写纠正、交互式完成、自定义、配置、性能、安全性、兼容性、命令语法、别名、历史记录、执行时间、错误处理、自动化、可扩展性、选项卡完成、复杂命令、帮助系统、调试、远程连接、虚拟化、通配、别名、游标、多路复用、历史扩展、通配、路径扩展、扩展通配、自动建议、精确完成、插件、自定义提示、路径扩展、路径名扩展、自动 cd 和变量。
重击概述
Bash 是一个稳定、可靠且功能强大的 Unix shell。 它作为许多 Unix 系统的默认 shell 已有很长的历史。 Bash 是 Linux 和 Mac OS X 系统中最流行的 shell。 它具有广泛的功能,使其成为用户的绝佳选择。 Bash 的一些关键特性包括拼写更正、交互式完成、自定义、配置、性能、安全性、兼容性、命令语法、别名、历史记录、执行时间、错误处理、自动化、可扩展性、选项卡完成、复杂命令、帮助系统、调试、远程连接、虚拟化、通配、别名、游标、多路复用、历史扩展、通配、路径扩展、扩展通配、自动建议、精确完成、插件、自定义提示、路径扩展、路径名扩展、自动 cd 和变量。
Zsh 与 Bash
现在让我们看看 ZSH 与 BASH 之间的比较。 虽然这两个 shell 都非常适合常规使用,但当您想要进入更具体的用例时,由于默认功能,这两个 shell 的性能不同。 现在让我们检查一下各个功能。
拼写更正
只在 shell 上工作时很容易出现拼写错误。 在这样的时候,具有自动纠正拼写的能力可能是一个福音。
不。 | 特征 | 狂欢 | Zsh |
1个 | 拼写更正 | Bash 不提供开箱即用的拼写校正,但可以借助一些命令启用它。 第一步是安装“aspell”包。 为此,只需输入命令`sudo 易于安装 aspell`。 此命令将使 shell 能够检测并更正拼写错误。 要启用拼写错误单词的自动更正,请将命令“bind ‘set completion-ignore-case on’”添加到 .bashrc 文件。 完成这些步骤后,Bash shell 将启用自动检测和更正拼写错误。 | Zsh 是一个功能强大的开源 shell,提供开箱即用的拼写校正。 它可以检测不正确的拼写并提出适当的更正建议。 它能够从过去的更正中学习,甚至可以检测不属于系统词典的单词。 要启用此功能,只需在 .zshrc 文件中启用“correct_all”选项即可。 要访问 .zshrc 文件,只需键入命令“vim ~/.zshrc”。 打开文件后,输入命令 setopt correct_all 并保存文件。 Zsh 现在可以自动检测和纠正拼写错误。 |
拼写更正
历史管理
不。 | 特征 | 狂欢 | Zsh |
2个 | 履历管理 | Bash 具有更多基本的历史管理功能,例如调用和重新执行以前的命令的能力。 | ZSH 具有更强大的历史管理功能,例如能够搜索和编辑以前的命令,以及控制命令在历史中存储多长时间。 |
履历管理
选项卡补全
不。 | 特征 | 狂欢 | Zsh |
3个 | 选项卡补全 | Bash 具有最少的制表符完成功能,例如完成命令名称和参数的能力。 | ZSH 具有更高级的制表符补全功能,例如补全命令名称和参数的能力,以及执行递归搜索补全的能力。 |
选项卡补全
别名
不。 | 特征 | 狂欢 | Zsh |
4个 | 别名 | ZSH 允许您为常用命令或命令序列创建和自定义别名。 | Bash 还允许您创建别名,但它们不如 ZSH 灵活和可定制。 |
别名
脚本
不。 | 特征 | 狂欢 | Zsh |
5个 | 脚本 | Bash 具有许多使其非常适合脚本编写的特性,包括: – 广泛的内置命令和实用程序,用于与操作系统交互和执行常见任务。 – 支持变量、数组和其他数据类型。 – 用于控制脚本流程的条件语句和循环结构。 -组织和重用代码的功能。 – 强大的命令行编辑和历史功能。 | 使 Zsh 成为脚本编写的不错选择的功能包括: -改进的命令行编辑和历史功能,包括搜索以前命令的能力。 – 更好地支持制表符完成,包括完成命令、选项和参数的能力。 – 其他数据类型,例如关联数组和浮点变量。 – 增强了对 globbing(通配符扩展)的支持。 – 额外的循环和条件结构。 |
脚本
句法
不。 | 特征 | 狂欢 | Zsh |
6个 | 句法 | ZSH 和 Bash 的语法相似,但略有不同。 为了 exampleZSH 使用 $~ 表示当前目录,而 Bash 使用 $PWD。 | ZSH 还有一些额外的语法特性,例如可以使用 $^ 来表示前一个命令的第一个参数,以及可以使用 $* 来表示前一个命令的所有参数。 |
句法
完成系统
不。 | 特征 | 狂欢 | Zsh |
7 | 完成系统 | Bash 有一个更基本的完成系统,能够定义自定义完成函数,但不能使用外部程序进行完成。 | ZSH 有一个更高级的补全系统,能够定义自定义补全函数并使用外部程序生成补全。 |
完成系统
命令行编辑
不。 | 特征 | 狂欢 | Zsh |
8个 | 命令行编辑 | Bash 具有更多基本的命令行编辑功能,例如使用 vi 风格或 emacs 风格的键绑定的能力,但没有执行内联编辑的能力。 | ZSH 具有更高级的命令行编辑功能,例如使用 vi 风格或 emacs 风格的键绑定的能力,以及执行命令行内联编辑的能力。 |
命令行编辑
作业控制
不。 | 特征 | 狂欢 | Zsh |
9 | 作业控制 | ZSH 和 Bash 都支持作业控制,允许您后台和前台进程,并同时管理多个进程。 | ZSH 有一些额外的作业控制功能,例如显示进程层次结构和直接在层次结构中的进程上执行作业控制操作的能力。 |
作业控制
文件通配
不。 | 特征 | 狂欢 | Zsh |
10 | 文件通配 | ZSH 和 Bash 都支持文件通配,这允许您使用通配符来匹配和扩展文件名。 | ZSH 具有一些用于文件通配的附加功能,例如使用 ** 运算符执行递归通配的能力,以及使用 extendedglob shell 选项启用其他通配模式的能力。 |
文件通配
模块
不。 | 特征 | 狂欢 | Zsh |
11 | 模块 | Bash 没有模块化架构,所有功能都内置到 shell 中 | ZSH 具有模块化架构,能够加载和卸载提供附加特性和功能的模块。 |
模块
主题
不。 | 特征 | 狂欢 | Zsh |
12 | 主题 | Bash 没有内置的主题系统,但您可以通过使用提示自定义和颜色设置来自定义 shell 的外观。 | ZSH 有一个称为“oh-my-zsh”的功能,它允许您轻松安装和自定义主题以更改 shell 的外观。 |
主题
多语言支持
不。 | 特征 | 狂欢 | Zsh |
13 | 多语言支持 | Bash 对多语言的支持有限,并且可能不适用于使用非拉丁字符或从右到左书写的语言。 | ZSH 具有更好的多语言支持,能够处理多个字符集并支持从右到左的语言。 |
多语言支持
执行优先级
不。 | 特征 | 狂欢 | Zsh |
14 | 执行优先级 | Bash 没有这个能力,所有命令都以相同的优先级执行。 | ZSH 能够使用 nice 和 nohup 命令定义命令的执行优先级。 |
执行优先级
文件名生成
不。 | 特征 | 狂欢 | Zsh |
15 | 文件名生成 | ZSH 和 Bash 都支持文件名生成,也称为“文件名扩展”,它允许您使用通配符来匹配和扩展文件名。 | ZSH 有一些用于文件名生成的附加功能,例如使用 ** 运算符执行递归扩展的能力,以及使用 extendedglob shell 选项启用其他扩展模式的能力。 |
文件名生成
结论
看起来 zsh 肯定比 bash. 由于其增加的功能超过 bash Apple 在其终端中使用 zsh 作为默认 shell 发布 Macos。 也就是说,最终,ZSH 和 Bash 之间的选择将取决于您的具体需求和偏好。 两种 shell 都有自己的优点和缺点,并且都可以有效地完成各种任务。 尝试两种 shell 并查看您更喜欢哪一种用于您的特定用例可能会有所帮助。