Logo
Section 1 / 5

什么是 shell 与 Bash 的历史

第一课为你提供关于 Bash 的高层次概述,并简要介绍其历史。

检查点

什么是 shell 与 Bash 的历史

第一课为你提供关于 Bash 的高层次概述,并简要介绍其历史。

Bash 是一种 shell 程序。

Shell 程序 通常是一个可执行的 二进制文件,它接收你输入的命令(当你按下回车后),将这些命令最终转换为对操作系统 API 的系统调用。

注意:
二进制文件是包含程序指令的文件,也就是“程序”文件,而不是“文本”文件或“应用”文件(如 Word 文档)。

如果你不清楚什么是操作系统 API,也不用担心。你只需要知道,shell 程序是一种让你告诉计算机该做什么的程序。从这个角度看,它与其他编程语言并没有太大区别。

让 bash 与其他一些语言不同的地方在于,它是一种专门用于“连接”其他程序的语言。

这一课的重要性?

本课将深入探讨 bash 的历史。虽然这些信息并非后续课程内容所必需,但有助于更全面地理解该主题。

其他 shell

Bash 并不是唯一的 shell 类型。其他常见的 shell 包括:

  • sh
  • ash
  • dash
  • ksh
  • tcsh
  • zsh
  • tclsh

你可能听说过其中一些,或者曾经使用过。这些 shell 虽然看起来相似,但各自有不同的规则、约定、逻辑和历史背景,因此在细节上可能存在微妙差异。

由于其他 shell 本身也是程序,它们可以在彼此之间运行!

以下代码示例展示了如何在终端中启动 tcsh。注意,在运行 tcsh 命令后,你会看到一个不同的提示符。

1tcsh # 进入 tcsh shell 2echo $dirstack # 输出 tcsh shell 中的一个变量 3exit # 退出 tcsh 程序,返回到 bash shell 4echo $dirstack # 该变量在 bash shell 中不存在

请在下方的终端中依次输入上述命令。

Terminal

注意:在整个课程中,假设你通过按顺序在每节课提供的终端中输入命令来完成学习。

dirstack 变量由 tcsh 设置,运行时会输出有意义的内容。但一旦你通过 exit 退出 tcsh 程序,就回到了 bash shell,而 bash 默认并不具备 dirstack 这个变量。

Bash 的历史

这张图帮助我们了解 shell 的发展脉络:

Shell 的家族树
Shell 的家族树

Bash 被称为“Bourne Again SHell”(Bourne 再生版 Shell)。它是从“Thompson Shell”发展而来,再继承自 Bourne 的 sh shell。Bash 还有其他“兄弟”(如 ksh)、“堂兄弟”(如 tcsh)以及“后代”(如 zsh)。

目前不需要掌握所有细节,但重要的是要明白:存在多种 shell,它们之间可能存在关联,并且在一定程度上兼容。

Bash 是最常见、最广泛使用和最易获取的 shell。然而,仍然有可能遇到没有安装 bash 的服务器!

你学到了什么?

  • 什么是 shell
  • 如何启动另一个 shell
  • shell 的家族关系

接下来?

接下来我们将学习 bash 中两个复杂但始终存在的主题:通配符匹配(globbing) 和 引号处理(quoting)。

练习题

1)从 bash 命令行运行 sh,会发生什么?

2)你能找到哪些在 bash 中可用但在 sh 中不可用的命令?

Quiz

单选题

Bash 的历史“父”壳是哪一个?

1 / 3

通配符匹配与引号