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 是更好的选择。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jetbrains IDE http客户端使用教程

简介 JetBrains IDE(如IntelliJ IDEA, WebStorm, PhpStorm和PyCharm)自带一个内置的HTTP客户端,允许直接从IDE发送HTTP请求,而无需使用第三方工具,如Postman或cURL。 JetBrains IDE 中的 HTTP…

android手机安装deepseek-r1:1.5b

序 本文主要展示一下如何在android手机上安装deepseek-r1:1.5b 步骤 安装termux 到https://termux.dev/cn/index.html去下载 然后执行termux-setup-storage以获取手机存储权限 安装构建依赖 pkg install git cmake golang下载ollama git clone --depth 1 https://gitee.…

U3D支持webgpu阅读

https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…

PWM波形输出

一、想要达到的效果 二、实现代码 因为是在1khz的频率下,所以用重新配置定时器0,定时长度为100微妙 void Timer0Init(void) //100微秒12.000MHz {AUXR | 0x80; //定时器时钟1T模式TMOD & 0xF0; //设置定时器模式TL0 0x50; //设置定时初值TH0 …

Spring Boot整合MQTT

MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址:Download | Eclipse Mosquitto,进行下载,以win版本为例 下载完成后,在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…

前端 CSS 动态设置样式::class、:style 等技巧详解

一、:class 动态绑定类名 v-bind:class&#xff08;缩写为 :class&#xff09;可以动态地绑定一个或多个 CSS 类名。 1. 对象语法 通过对象语法&#xff0c;可以根据条件动态切换类名。 <template><div :class"{ greenText: isActive, red-text: hasError }&…

TCP三次握手全方面详解

文章目录 (1) 三次握手各状态CLOSE状态SYN_SENT状态SYN_RECV状态ESTABLISHED状态 (2) 为什么握手时的seqnum是随机值&#xff0c;以及acknum的功能(3) 三次握手中的半连接队列&#xff08;SYN队列&#xff09;和全连接队列&#xff08;ACCEPT队列&#xff09;半连接队列全连接队…

基于Java的远程视频会议系统(源码+系统+论文)

第一章 概述 1.1 本课题的研究背景 随着人们对视频和音频信息的需求愈来愈强烈&#xff0c;追求远距离的视音频的同步交互成为新的时尚。近些年来&#xff0c;依托计算机技术、通信技术和网络条件的发展&#xff0c;集音频、视频、图像、文字、数据为一体的多媒体信息&#xff…

Docker Desktop安装到其他盘

Docker Desktop 默认安装到c盘&#xff0c;占用空间太大了&#xff0c;想给安装到其他盘&#xff0c;网上找了半天的都不对 正确安装命令&#xff1a; start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…

手动配置IP

手动配置IP&#xff0c;需要考虑四个配置项&#xff1a; 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址&#xff1a;格式表现为点分十进制&#xff0c;如192.168.254.1 子网掩码&#xff1a;用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…

Qt:常用控件

目录 控件概述 控件体系的发展 按钮类控件 QPushButton QRadioButton QCheckBox QToolButton 显示类控件 QLabel QLCDNumber QProgressBar QCalendarWidget 输入类控件 QLineEdit QTextEdit QComboBox QSpinBox QDateEdit & QTimeEdit QDial QSlider …

【漫话机器学习系列】087.常见的神经网络最优化算法(Common Optimizers Of Neural Nets)

常见的神经网络优化算法 1. 引言 在深度学习中&#xff0c;优化算法&#xff08;Optimizers&#xff09;用于更新神经网络的权重&#xff0c;以最小化损失函数&#xff08;Loss Function&#xff09;。一个高效的优化算法可以加速训练过程&#xff0c;并提高模型的性能和稳定…

4G核心网的演变与创新:从传统到虚拟化的跨越

4G核心网 随着移动通信技术的不断发展&#xff0c;4G核心网已经经历了从传统的硬件密集型架构到现代化、虚拟化网络架构的重大转型。这一演变不仅提升了网络的灵活性和可扩展性&#xff0c;也为未来的5G、物联网&#xff08;LOT&#xff09;和边缘计算等技术的发展奠定了基础。…

拉格朗日插值法的matlab实现

一、基本原理 比如有如下这些点 x1x2x3x4y1y2y3y4 那么在拉个朗日原理中可以把过这些点的曲线表示为&#xff1a; 其g(x)y叫做一个插值基函数&#xff08;开关&#xff09;&#xff0c;当xx1时&#xff0c;g1(x)1&#xff0c;而当xx2,x3,x4时&#xff0c;g1(x)都为0&#xf…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;?? 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xff1a;WebSt…

35~37.ppt

目录 35.张秘书-《会计行业中长期人才发展规划》 题目​ 解析 36.颐和园公园&#xff08;25张PPT) 题目​ 解析 37.颐和园公园&#xff08;22张PPT) 题目 解析 35.张秘书-《会计行业中长期人才发展规划》 题目 解析 插入自定义的幻灯片&#xff1a;新建幻灯片→重用…

day44 QT核心机制

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …

kafka服务端之副本

文章目录 概述副本剖析失效副本ISR的伸缩LWLEO与HW的关联LeaderEpoch的介入数据丢失的问题数据不一致问题Leader Epoch数据丢失数据不一致 kafka为何不支持读写分离 日志同步机制可靠性分析 概述 Kafka中采用了多副本的机制&#xff0c;这是大多数分布式系统中惯用的手法&…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

mysql8.0使用MHA实现高可用

一、环境配置 本实验环境共有四个节点&#xff0c; 其角色分配如下&#xff08;实验机器均为centos 7.x &#xff09; 机器名称IP配置服务角色备注manager192.168.8.145manager控制器用于监控管理master192.168.8.143数据库主服务器开启bin-log relay-log 关闭relay_logslave…