当前位置: 首页 > news >正文

Bash (Bourne-Again Shell)、Zsh (Z Shell)

文章目录

      • 1. 历史背景
      • 2. 主要区别
      • 3. 功能对比
        • 自动补全
        • 插件和主题
        • 路径扩展
        • 提示符定制
      • 4. 性能
      • 5. 使用场景
      • 6. 如何切换 Shell
      • 7. 总结

以下是 BashZsh 之间的主要区别,列成表格方便对比:

特性BashZsh
默认Shell大多数Linux发行版默认ShellmacOS默认Shell (Catalina后)
兼容性兼容POSIX标准兼容Bash,扩展更多功能
插件支持插件支持较少强大插件系统,如Oh My Zsh
补全功能基本命令补全更智能的自动补全,菜单式选择
历史记录仅支持简单历史记录更强大的历史管理,如模糊搜索
语法扩展传统Shell语法额外的语法扩展与改进
通配符普通通配符匹配更强的通配符匹配功能
自定义性自定义功能有限可高度自定义,主题丰富
别名功能支持基本别名支持全局别名
性能运行速度稍快启动时稍慢 (受插件影响)

如果你想要 兼容性好轻量,可以用 Bash
如果你希望有 更好的补全、插件和定制化,可以用 Zsh(配合 Oh My Zsh 更强大!)。🎉


BashZsh 是两种常见的 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. 主要区别

特性BashZsh
自动补全基本支持文件名和命令补全。更强大的补全功能,支持命令、参数、文件名、路径等。
插件和主题不支持原生插件系统。支持丰富的插件和主题(通过 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…...

Android studio 创建aar包给Unity使用

1、aar 是什么? 和 Jar有什么区别 aar 和 jar包 都是压缩包,可以使用压缩软件打开 jar包 用于封装 Java 类及其相关资源 aar 文件是专门为 Android 平台设计的 ,可以包含Android的专有内容,比如AndroidManifest.xml 文件 &#…...

DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求

DeepSeek 的 LLM 推理新方法 DeepSeek 推出了一种创新方法,通过强化学习 (RL) 来提高大型语言模型 (LLM) 的推理能力,其最新论文 DeepSeek-R1 对此进行了详细介绍。这项研究代表了我们如何通过纯强化学习来增强 LLM 解决复杂问题的能力,而无…...

图论常见算法

图论常见算法 算法prim算法Dijkstra算法 用途最小生成树(MST):最短路径:拓扑排序:关键路径: 算法用途适用条件时间复杂度Kruskal最小生成树无向图(稀疏图)O(E log E)Prim最小生成树无…...

MySQL三大日志详解

在MySQL数据库的运行过程中,三大关键日志——binlog、redo log和undo log,起着至关重要的作用。理解这三大日志,对于深入掌握MySQL的工作原理、数据恢复以及主从复制等操作有着极大的帮助。本文将详细剖析这三大日志的作用和工作机制。 Binl…...

【SQL 中的分组查询与联合查询详解】

文章目录 SQL 中的分组查询与联合查询详解 1. GROUP BY分组查询 1.1 语句格式1.2 示例说明 1.2.1 分别查询哥哥组和弟弟组的英语成绩总和1.2.2 查询哥哥组的所有成绩总和 2. 联合查询 2.1 内连接 2.1.1 语法格式2.1.2 执行过程 2.2 外连接 2.2.1 左外连接2.2.2 右外连接 2.3 …...

【实战篇】用 Cursor 独立开发并上线电商类 Android APP 全攻略

一、为啥要用 Cursor 开发电商类 Android APP 家人们,如今电商类 APP 随处可见,不管是买衣服、食品,还是电子产品,都能通过这些 APP 轻松搞定。要是能自己开发一款电商类 Android APP,那可太酷啦!但开发 APP 可不是一件容易的事,涉及到很多技术,像写代码、设计界面、处…...

quartus24.1版本子模块因时钟问题无法综合通过,FPGA过OOC问题复盘

因为只负责一个子模块,所以需要单独对该子模块进行综合和过OOC,这时候已经有一些加虚拟pin文件,敲命令让子模块能过OOC的方法。但这个方法的前提是先过综合,然后再敲命令让虚拟管脚命令成功,最终可以过OOC。 今天负责…...

零基础Vue入门6——Vue router

本节重点: 路由定义路由跳转 前面几节学习的都是单页面的功能(都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html),涉及到项目研发都是有很多页面的,这里就需要用到路由(vue route…...

使用 Let‘s Encrypt 和 OpenResty 实现域名转发与 SSL 配置

在搭建网站或服务时,确保域名的安全性和正确的流量转发是非常重要的。本文将介绍如何使用 Let’s Encrypt 获取免费的 SSL 证书,并将其配置到 OpenResty 中,同时实现特定的域名转发规则。这不仅可以提升网站的安全性,还能优化流量…...

Lambda 表达式

一、Lambda 表达式简介 Lambda 表达式是一种简洁的函数式编程方式,用于实现只有一个方法的接口(例如函数式接口)。 基本语法 (parameters) -> expression (parameters) -> { statements; } 参数:可以有零个或多个参数。…...

TCN时间卷积神经网络多变量多步光伏功率预测(Matlab)

代码下载:TCN时间卷积神经网络多变量多步光伏功率预测(Matlab) TCN时间卷积神经网络多变量多步光伏功率预测 一、引言 1.1、研究背景和意义 随着全球能源危机的加剧和环保意识的提升,可再生能源,尤其是太阳能&…...

【Elasticsearch】 Composite Aggregation 详解

1.什么是 Composite Aggregation? Composite Aggregation 是 Elasticsearch 中的一种特殊聚合方式,适用于需要分页展示的聚合结果。它与传统的聚合方式不同,采用了基于游标的分页模型。这种聚合方式可以高效地处理多级聚合中的所有桶&#x…...

如何通过 Logstash 将数据采集到 Elasticsearch

作者:来自 Elastic Andre Luiz 将 Logstash 与 Elasticsearch 集成以实现高效的数据提取、索引和搜索的分步指南。 什么是 Logstash? Logstash 是一种广泛使用的 Elastic Stack 工具,用于实时处理大量日志数据。它充当高效的数据管道&#x…...

mysql的cpu使用率100%问题排查

背景 线上mysql服务器经常性出现cpu使用率100%的告警, 因此整理一下排查该问题的常规流程。 1. 确认CPU占用来源 检查系统进程 使用 top 或 htop 命令,确认是否是 mysqld 进程导致CPU满载:top -c -p $(pgrep mysqld)2. 实时分析MySQL活动 …...

centos虚拟机迁移没有ip的问题

故事背景,我们的centos虚拟机本来是好好的,但是拷贝到其他电脑上就不能分配ip,我个人觉得这个vmware他们软件应该搞定这个啊,因为这个问题是每次都会出现的。 网络选桥接 网络启动失败 service network restart Restarting netw…...

接入 deepseek 实现AI智能问诊

1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目(选择 Vue3 或 Vue2 模板)。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求,推荐使用 uni.requ…...

用AVFrame + AVPacket 完成accede编码和直接用ffmpeg命令行实现acc编码的对比

在使用 FFmpeg 进行 AAC 音频编码时,可以选择两种方式:通过编程接口(如 AVFrame 和 AVPacket)实现 AAC 编码,或者直接使用 FFmpeg 命令行工具。这两种方式各有特点,适用于不同的场景。以下是对两种方法的详细分析,包括它们的区别、优缺点以及适用场景。 一、通过 AVFram…...

计算机网络笔记再战——理解几个经典的协议6——TCP与UDP

目录 先说端口号 TCP 使用序号保证顺序性和应答来保证有效性 超时重传机制 TCP窗口机制 UDP 路由协议 协议分类:IGP和EGP 几个经典的路由算法 RIP OSPF 链路状态数据库(LSDB) LSA(Link State Advertisement&#xff0…...

【AI】在Ubuntu中使用docker对DeepSeek的部署与使用

这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中,有效地利用机器学习工具来解决问题变得越来越重要。今天,我将引入一个名为DeepSeek 的工具,它作为一种强大的搜索引擎&a…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...