Bash (Bourne-Again Shell)、Zsh (Z Shell)
文章目录
- 1. 历史背景
- 2. 主要区别
- 3. 功能对比
- 自动补全
- 插件和主题
- 路径扩展
- 提示符定制
- 4. 性能
- 5. 使用场景
- 6. 如何切换 Shell
- 7. 总结
以下是 Bash 和 Zsh 之间的主要区别,列成表格方便对比:
| 特性 | Bash | Zsh |
|---|---|---|
| 默认Shell | 大多数Linux发行版默认Shell | macOS默认Shell (Catalina后) |
| 兼容性 | 兼容POSIX标准 | 兼容Bash,扩展更多功能 |
| 插件支持 | 插件支持较少 | 强大插件系统,如Oh My Zsh |
| 补全功能 | 基本命令补全 | 更智能的自动补全,菜单式选择 |
| 历史记录 | 仅支持简单历史记录 | 更强大的历史管理,如模糊搜索 |
| 语法扩展 | 传统Shell语法 | 额外的语法扩展与改进 |
| 通配符 | 普通通配符匹配 | 更强的通配符匹配功能 |
| 自定义性 | 自定义功能有限 | 可高度自定义,主题丰富 |
| 别名功能 | 支持基本别名 | 支持全局别名 |
| 性能 | 运行速度稍快 | 启动时稍慢 (受插件影响) |
如果你想要 兼容性好 且 轻量,可以用 Bash。
如果你希望有 更好的补全、插件和定制化,可以用 Zsh(配合 Oh My Zsh 更强大!)。🎉
Bash 和 Zsh 是两种常见的 Unix Shell,它们在功能、用户体验和扩展性上有一些显著的区别。以下是它们的详细对比:
1. 历史背景
-
Bash (Bourne-Again Shell):
- 由 Brian Fox 于 1989 年开发,是 Bourne Shell (sh) 的增强版。
- 是大多数 Linux 发行版和 macOS(2019 年之前)的默认 Shell。
- 广泛用于脚本编写和系统管理。
-
Zsh (Z Shell):
- 由 Paul Falstad 于 1990 年开发,旨在扩展 Bash 的功能。
- 从 2019 年开始,macOS 将 Zsh 作为默认 Shell。
- 以其强大的定制性和用户体验著称。
2. 主要区别
| 特性 | Bash | Zsh |
|---|---|---|
| 自动补全 | 基本支持文件名和命令补全。 | 更强大的补全功能,支持命令、参数、文件名、路径等。 |
| 插件和主题 | 不支持原生插件系统。 | 支持丰富的插件和主题(通过 Oh My Zsh 等框架)。 |
| 脚本兼容性 | 完全兼容 Bourne Shell (sh)。 | 兼容 Bash,但某些脚本可能需要调整。 |
| 配置管理 | 配置文件为 ~/.bashrc 或 ~/.bash_profile。 | 配置文件为 ~/.zshrc。 |
| 提示符定制 | 支持基本定制。 | 支持高度定制(如显示 Git 分支、时间等)。 |
| 错误处理 | 错误处理较为基础。 | 提供更详细的错误信息和调试功能。 |
| 路径扩展 | 支持基本路径扩展。 | 支持更强大的路径扩展(如递归通配符 **)。 |
| 社区支持 | 广泛支持,适合系统管理员和脚本开发者。 | 开发者社区活跃,适合日常使用和开发。 |
3. 功能对比
自动补全
- Bash:支持基本的文件名和命令补全。
- Zsh:支持更智能的补全,例如:
- 命令参数补全。
- 路径补全(如
cd /u/l/b补全为/usr/local/bin)。 - Git 分支补全。
插件和主题
- Bash:没有原生的插件系统,扩展性有限。
- Zsh:通过框架(如 Oh My Zsh)支持大量插件和主题,例如:
- Git 集成。
- 语法高亮。
- 自动建议。
路径扩展
- Bash:支持基本的通配符(如
*和?)。 - Zsh:支持更强大的通配符,例如:
- 递归匹配(如
**/*.txt)。 - 排除特定文件(如
*.txt~README.txt)。
- 递归匹配(如
提示符定制
- Bash:提示符定制较为简单。
- Zsh:提示符可以显示丰富的信息,例如:
- 当前 Git 分支。
- 命令执行时间。
- 错误状态。
4. 性能
- Bash:启动速度较快,适合脚本执行。
- Zsh:启动速度稍慢(尤其是加载插件时),但日常使用中差异不明显。
5. 使用场景
-
Bash:
- 适合系统管理员和脚本开发者。
- 兼容性高,适合编写可移植的脚本。
- 适合资源受限的环境。
-
Zsh:
- 适合开发者和日常用户。
- 提供更好的用户体验和生产力工具。
- 适合需要高度定制的环境。
6. 如何切换 Shell
-
查看当前 Shell:
echo $SHELL -
切换为 Bash:
chsh -s /bin/bash -
切换为 Zsh:
chsh -s /bin/zsh
7. 总结
- Bash:简单、稳定、兼容性强,适合脚本编写和系统管理。
- Zsh:功能强大、高度可定制,适合日常使用和开发。
如果你追求更好的用户体验和生产力工具,推荐使用 Zsh(尤其是配合 Oh My Zsh)。如果你需要编写可移植的脚本或管理服务器,Bash 是更好的选择。

相关文章:
Bash (Bourne-Again Shell)、Zsh (Z Shell)
文章目录 1. 历史背景2. 主要区别3. 功能对比自动补全插件和主题路径扩展提示符定制 4. 性能5. 使用场景6. 如何切换 Shell7. 总结 以下是 Bash 和 Zsh 之间的主要区别,列成表格方便对比: 特性BashZsh默认Shell大多数Linux发行版默认ShellmacOS默认She…...
pikachu[皮卡丘] 靶场全级别通关教程答案 以及 学习方法 如何通过渗透测试靶场挑战「pikachu」来精通Web渗透技巧? 一篇文章搞完这些问题
目录 Pikachu靶场 部署 暴力破解漏洞 学习地址: 靶场练习: 基于表单的暴力破解 验证码绕过(on server) 验证码绕过(on Client) token防爆破? XSS跨站脚本攻击 学习地址: 靶场练习: 反射型xss(get) 反射性xss(post) 存储型xss DOM型xss xss盲打 x…...
汽车零部件工厂如何借助安灯呼叫按钮盒提升生产响应速度
在现代汽车零部件工厂的生产环境中,高效的信息传递和快速的响应速度是确保生产顺畅运行的关键。然而,传统的口头呼喊或现场沟通方式往往存在信息传递慢、现场嘈杂、责任人难以及时找到等问题,尤其在设备故障或缺料时,这些问题会导…...
【0404】Postgres内核 实现分配一个新的 Object ID (OID)
文章目录 1. 分配一个新 Object ID (OID)1.1 ShmemVariableCache 中 nextOid1.2 写一个 NEXTOID log record1. 分配一个新 Object ID (OID) Postgres内核中分配一个新的 Oid 是由函数 GetNewObjectId() 实现。该函数声明于 transam.h,实现于 varsup.c 源文件。 对于 GetNewO…...
Idea 2024.3 使用CodeGPT插件整合Deepseek
哈喽,大家好,我是浮云,最近国产大模型Deepseek异常火爆,作为程序员我也试着玩了一下,首先作为简单的使用,大家进入官网,点击开始对话即可进行简单的聊天使用,点击获取手机app即可安装…...
「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
C++自研3D教程OPENGL版本---动态批处理的基本实现
又开始找工作了,借机休息出去旅行两个月,顺便利用这段时间整理下以前写的东西。 以下是一个简单的动态批处理实现: #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> #include <vector>// 顶点结…...
docker /var/lib/docker/overlay2目录把磁盘空间占满问题
1、查看服务器磁盘空间 df -h果然100%了,docker系统文件把磁盘空间占满了。 2、进入overlay2目录,查找那个容器工作目录占用最高 cd /var/lib/docker/overlay2du -h --max-depth1详见下图 好家伙占用110G!复制目录名称2c3c48ccac533c5d4a366d45a19bb9…...
SOA(面向服务架构)全面解析
1. 引言 什么是SOA(面向服务架构) SOA(Service-Oriented Architecture,面向服务架构)是一种将应用程序功能以“服务”的形式进行模块化设计的架构风格。这些服务是独立的功能模块,它们通过定义明确的接口…...
华为交换机堆叠配置
一、CSS堆叠集群配置(框式交换机) 1、通过集群卡连接方式组建集群 [SwitchA] set css mode css-card \\配置集群卡连接方式 [SwitchA] set css id 1 \\配置成员交换机的集群ID(缺省值为1) [SwitchA] set css priority 100 \\配…...
蓝桥杯备赛——进制转化相关问题
目录 一、基础概念 二、问题研究(1) 代码解读: 1. transfer 函数 代码功能概述 详细步骤 2. main 函数 代码功能概述 详细步骤 三、运用递归解决 (一) 代码如下: 代码解读: &#…...
Nginx配置 ngx_http_proxy_connect_module 模块及安装
1、配置完互联网yum源后,安装相关依赖软件包 [root@server soft]# yum install -y patch pcre pcre-devel make gcc gcc-c++ openssl openssh [root@server soft]# yum install openssl* 2、解压缩软件,加载模块 [root@server soft]# ls nginx-1.20.2 nginx-1.20.2.tar.gz …...
WebSocket推送数据快,条数多导致前端卡顿问题解决
WebSocket推送数据快,条数多导致前端卡顿问题解决 前言方案优化消息频率使用高效的数据格式Protobuf 和 MessagePack的对比 启用压缩前端性能优化 WebSocket使用注意事项连接管理处理断开连接负载均衡监控和维护日志记录定期维护安全最佳实践限流 最后 前言 在项目…...
网络爬虫技术如何影响网络安全的
随着网络的发展和网络爬虫技术的普及,一些人收集某些需要的信息,会使用网络爬虫进行数据抓取。网络爬虫一方面会消耗网络系统的网络资源,同时可能会造成核心数据被窃取,因此对企业来讲如何反爬虫显得非常重要。 一、什么是网络爬…...
基于蒙特卡洛思想生成电动汽车充电负荷曲线
本程序基于蒙特卡洛思想生成电动汽车充电负荷曲线,利用第十一届电工杯所提供的数据(充电开始时间,充电电量,充电功率)得到一万台电动汽车充电负荷曲线。蒙特卡洛只是解决问题的一种思想,本程序可为其他利用…...
Redis深入学习
目录 Redis是什么? Redis使用场景 Redis线程模型 Redis执行命令是单线程的为什么还这么快? Redis持久化 Redis 事务 Key 过期策略 Redis 和 mysql 如何保证数据一致? 缓存穿透 缓存击穿 缓存雪崩 Redis是什么? redis是一…...
kamailio中路由模块汇总
功能模块描述请求路由 (request_route)主要处理进入的SIP请求,包含初步检查、NAT检测、CANCEL请求处理、重传处理等。处理通过REQINIT、NATDETECT、RELAY等子模块的调用。CANCEL处理对CANCEL请求进行处理,包括更新对话状态并检查事务。如果事务检查通过&…...
EasyExcel 导出合并层级单元格
EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…...
青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要
青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要 一、Django 5Django 5 的主要特性包括: 二、MVT模式三、官方网站四、内置功能数据库 ORM(对象关系映射)用户认证和授权表单处理模板引擎URL 路由缓存框架国际化和本地化安全性功能管…...
Oracle认证大师(OCM)学习计划书
Oracle认证大师(OCM)学习计划书 一、学习目标 Oracle Certified Master(OCM)是Oracle官方认证体系中的最高级别认证,要求考生具备扎实的数据库管理技能、丰富的实战经验以及解决复杂问题的能力。本计划旨在通过系统化的…...
2.7学习
crypto buu-还原大师 仔细阅读题目,这里有一段字符串,但是其中有四个大写字母被替换成了‘?’,那么我们写脚本:首先将四个问号均换成26个大写字母并且组成不同的组合, 所以有四个循环让四个问号都遍历26个…...
oracle ORA-27054报错处理
现象 在oracle执行expdp,rman备份,xtts的时候,由于没有足够的本地空间,只能使用到NFS的文件系统但有时候会出现如下报错 ORA-27054: NFS file system where the file is created or resides is not mounted with correct options根据提示信…...
核显是什么
核显(Integrated Graphics,集成显卡)是指集成在中央处理器(CPU)或者主板上的显卡。与独立显卡不同,核显不需要额外的显卡硬件,而是直接使用系统内存(RAM)和处理器的资源来…...
使用LLaMA Factory踩坑记录
前置条件:电脑显卡RTX 4080 问题:LLaMA-Factory在运行的时候,弹出未检测到CUDA的报错信息 结论:出现了以上的报错,主要可以归结于以下两个方面: 1、没有安装GPU版本的pytorch,下载的是CPU版本…...
在qtcreator中添加片段,提高开发效率。
文件名:text.xml <?xml version"1.0" encoding"utf-8"?> <snippets><!-- 版权声明 --><snippet group"Text" trigger"copyright" id"comment_copyright">/*!* file %{CurrentDocum…...
redis的数据结构介绍(string
redis是键值数据库,key一般是string类型,value的类型很多 string,hash,list,set,sortedset,geo,bitmap,hyperlog redis常用通用命令: keys: …...
ASP.NET Core JWT Version
目录 JWT缺点 方案 实现 Program.cs IdentityHelper.cs Controller NotCheckJWTVersionAttribute.cs JWTVersionCheckkFilter.cs 优化 JWT缺点 到期前,令牌无法被提前撤回。什么情况下需要撤回?用户被删除了、禁用了;令牌被盗用了&…...
电路研究9.3——合宙Air780EP中的AT开发指南(含TCP 示例)
根据合宙的AT研发推荐, AT指令基本上也简单看完了,这里开始转到AT的开发了。 AT 命令采用标准串口进行数据收发,将以前复杂的设备通讯方式转换成简单的串口编程, 大大简化了产品的硬件设计和软件开发成本,这使得几乎所…...
Reqable使用实践
一、背景 日常开发中,难免要抓取请求数据,查看接口数据,从而更好定位问题,基于这个原因,查找了一些抓包工具,例如: HttpCanary、 Steam 、Fiddler等,不是要钱,就是只对苹…...
【蓝桥杯嵌入式】2_LED
全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、电路图 74HC573是八位锁存器,当控制端LE脚为高电平时,芯片“导通”,LE为低电平时芯片“截止”即将输出状态“锁存”…...
