SH 和 BASH 有什么区别?

2023-11-05

当谈到 shell 脚本时,两个著名的 shell 经常脱颖而出:Bourne Shell (SH) 和 Bourne Again Shell (Bash)。两者都是基于 Unix 和 Linux 的系统的组成部分,提供与操作系统交互的接口。本文旨在深入研究这两种 shell 之间复杂的差异,揭示它们的独特特性,并提供比较分析,以帮助您了解何时以及为何使用其中一种。

SH 和 Bash 是什么?

SH, 原本的伯恩壳牌,于 20 世纪 70 年代推出,作为 Unix 的主要 shell。贝尔实验室的斯蒂芬·伯恩开发了它,因此得名。 SH 以其简单性和便携性而闻名。创建可以在各种 Unix 衍生版本上执行的脚本时,它是一个可靠的选择。

Bash,另一方面,代表谍影重重 SHell。它是原始 SH 的改进版本,由 Brian Fox 为 GNU 项目开发,作为 Bourne Shell 的免费软件替代品。 Bash 是许多 Linux 发行版和 macOS 的默认 shell。它包含来自其他 shell(例如 KornShell (ksh) 和 C shell (csh))的功能,提供更强大的功能和脚本编写功能。

SH 和 Bash 之间的主要区别

  1. Syntax Differences: Bash provides more shorthand and enhanced scripting syntax compared to SH. For example, in bash, you can use the double square bracket syntax [[ ]] for tests, which is more robust and safer than the single bracket syntax [ ] used in SH.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # SH 语法
    if [ $a -lt $b ]; then
      echo “$a 小于 $b”
    fi
     
    # Bash 语法
    if [[ $a -lt $b ]]; then
      echo “$a 小于 $b”
    fi
  2. Array Variables: Bash supports array variables, whereas SH does not. Arrays can be useful when you need to work with multiple values stored under a single variable name.
    1
    2
    3
    # Bash 语法
    array=("apple" "banana" "cherry")
    echo ${array[1]}  # 输出“香蕉”
  3. 命令行编辑:Bash 支持命令行编辑,而这在 SH 中不是标准的。在 Bash 中,您可以使用箭头键导航命令历史记录,使用退格键删除文本,以及使用制表符完成来完成文件名和命令名称。
  4. 外壳选项:与 SH 相比,Bash 具有额外的 shell 选项。例如,Bash 中的 shopt 命令提供了更改 SH 中不可用的其他 shell 可选行为的能力。
  5. Process Substitution: Bash supports process substitution (<(command) and >(command)), allowing a process’s input or output to be referred to using a filename. This feature is not available in SH.
    1
    2
    # Bash 语法
    diff <(command1) <(command2)
  6. 未找到命令挂钩:Bash 有一个特殊的 shell 函数 command_not_found_handle,当未找到命令时执行该函数。 SH 中不提供此功能。
  7. Here Strings: Bash supports “Here Strings” which is a form of I/O redirection allowing a string to be used as the input for a command, denoted by <<<. This feature is not available in SH.
    1
    2
    # Bash 语法
    wc -l <<< “这是一个字符串”

选择哪个:SH 还是 Bash?

SH 和 Bash 之间的决定归结为您的特定项目的需求。如果您正在创建需要在各种 Unix 系统上运行的脚本,由于其可移植性和兼容性,SH 可能是更好的选择。但是,如果您在 Linux 或 macOS 系统上工作并且需要额外的功能和语法增强,那么 Bash 是首选 shell。

结论

总而言之,SH 和 Bash 都有各自的优势。 SH 是一个经典、简约的 shell,可以完成工作,而 Bash 则为复杂的脚本需求提供了功能更丰富的环境。了解两者之间的差异是成为熟练的 shell 脚本编写者的关键一步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SH 和 BASH 有什么区别? 的相关文章

随机推荐

  • 如何正确理解三极管的放大区、饱和区、截止区

    作为电子初学者来说 模拟电路非常重要 模拟电路的三极管的应用是重中之重 能正确理解三极管的放大区 饱和区 截止区是理解三极管的标志 很多初学者都会认为三极管是两个 PN 结的简单凑合 如下图 这种想法是错误的 两个二极管的组合不能形成一个三
  • 多线程和高并发介绍

    多线程和高并发介绍 文章目录 多线程和高并发介绍 前言 一 什么是多线程 1 多线程介绍 2 多线程实现原理 3 白话文解释多线程 4 多线程存在的问题 二 什么是高并发 1 高并发介绍 2 如何提升系统的并发能力 三 多线程和高并发 总结
  • es6对象多层解构、数组解构

    对象类 基础对象解构 const obj a 1 b 2 c 3 const a b c obj console log a b c 1 2 3 多层对象解构 const obj a 1 b 2 c 3 d d1 4 const a b c
  • qt调用Linux脚本范例,QT下实现对Linux Shell调用的几种方法

    使用QProcess QThread include int main QProcess execute ls return 0 QProcess poc new QProcess poc gt start ping 222 207 53
  • [极客大挑战 2019]Knife

    极客大挑战 2019 Knife 主界面 很显然 题目已经内置了一个一句话木马 我们只需要用蚁剑连接即可 但是我在连接蚁剑时报错了 错误如下 经过搜索 原来是开启了手动代理模式 在菜单中关闭即可 更改后成功进入 在根目录下找到flag文件
  • 20050405:什么都要会啊

    为了要修补门户的页面 今天学会了三样 怎么用Photoshop切割图片并存入网页 怎么用DW在表格中平铺背景图片 在么用Tomcat部署网站 真的是什么都要会啊 今天下午在漫网论坛上发了封贴子 晚上却被删了 原贴如下 关于日本动漫中女性角色
  • C 语言实现简单有限状态机

    简介 常说的状态机是有限状态机 FSM 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 三个特征 状态总数 state 是有限的 任一时刻 只处在一种状态之中 某种条件下 会从一种状态转变 transition 到另一种
  • KVM快照

    KVM快照就是将虚拟机在某一个时间点上的磁盘内容 全部 或部分 内存和设备状态保存一下 以备将来恢复之用 一 内存状态快照 只是保持内存和虚机使用的其它资源的状态 如果虚机状态快照在做和恢复之间磁盘没有被修改 那么虚机将保持一个持续的状态
  • 不安装Visual Studio,只用Windows SDK搭建VC环境

    首先你需要下载的是 Microsoft Windows SDK for Windows 7 and NET Framework 4 下载以后你得到的是一个网络安装文件 确保网络的连接 安装Windows SDK 7 1 注意得到的Windo
  • git的分支

    1 master主分支 在初始化本地Git仓库的时候 Git默认已经帮我们创建了一个名字叫做master的分支 通常我们把这个master分支叫做主分支 在实际工作中 master主分支的作用是 用来保存和记录整个项目已完成的功能代码 因此
  • 图形基础-叉乘

    using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviour public Vecto
  • flink部署三种模式(案例操作)

    文章目录 一 Local模式 1 应用场景 2 操作 二 Standalone 模式 1 应用场景 2 部署模式 2 1 会话模式 2 1 1 安装规划 2 1 2 修改配置 2 1 3 分发安装目录 2 1 4 启动集群 2 1 5 访问
  • xp的服务器系统怎么安装win7系统教程,把xp系统重装成win7最简单实用的方法

    xp系统重装成win7 很多网友现在想把把 因为微软对xp系统的停止服务 很多人都想安装win7系统了 xp系统重装win7有什么方法好 小编推荐在线重装系统 那就是系统一键重装大师 这个软件功能非常强大 现在就让小编告诉大家把xp系统重装
  • shell 重定向

    输入重定向 默认的输入文件是标注输入stdin 0 可以使用下面的方法重定向输入 command lt filename 这样就会从filename文件中读取数据送给command命令使用 例如 cat etc passwd 输出重定向 默
  • Qt Q_UNUSED() 做什么用的

    Q UNUSED 是用来在编译时忽略函数不用的形参 这样就不会黄色报警了 当然也可以不加 就会有黄色报警
  • Python配置MySQL数据库使用

    创建配置文件 config ini MySQL host 172 xxx xxx xxx port 3306 user root password db bgp routing charset utf8 创建读取配置文件 readConfi
  • 如何在 Ubuntu 20.04 上安装 Skype

    Skype 是一种电信应用程序 提供用户和用户组之间的聊天和视频等功能 大多数现代操作系统 移动设备和智能手表都提供此功能 它还提供了通过移动网络跨境呼叫的选项 本教程将帮助您在 Ubuntu 20 04 LTS Focal Fossa L
  • Bash 中的浮点数学计算:综合指南

    Bash 是一种广泛使用的 Unix shell 它本身并不具备处理浮点数学的能力 然而 在各种工具和实用程序的帮助下 Bash 可以有效地执行浮点计算 在本文中 我们将探索在 Bash 中执行浮点数学计算的不同技术以及实际示例 目录 Ba
  • 如何安装 Docker Compose:简单指南

    Docker compose 是一个有价值的工具 可让用户定义和运行多容器 Docker 应用程序 您可以在单个容器中定义多容器环境 而不是为每个容器使用单独的命令 docker compose yml 文件 然后使用单个命令 docker
  • SH 和 BASH 有什么区别?

    当谈到 shell 脚本时 两个著名的 shell 经常脱颖而出 Bourne Shell SH 和 Bourne Again Shell Bash 两者都是基于 Unix 和 Linux 的系统的组成部分 提供与操作系统交互的接口 本文旨