什么是 shell 与 Bash 的历史
第一课为你提供关于 Bash 的高层次概述,并简要介绍其历史。
Bash 是一种 shell 程序。
Shell 程序 通常是一个可执行的 二进制文件,它接收你输入的命令(当你按下回车后),将这些命令最终转换为对操作系统 API 的系统调用。
注意:
二进制文件是包含程序指令的文件,也就是“程序”文件,而不是“文本”文件或“应用”文件(如 Word 文档)。
如果你不清楚什么是操作系统 API,也不用担心。你只需要知道,shell 程序是一种让你告诉计算机该做什么的程序。从这个角度看,它与其他编程语言并没有太大区别。
让 bash 与其他一些语言不同的地方在于,它是一种专门用于“连接”其他程序的语言。
这一课的重要性?
本课将深入探讨 bash 的历史。虽然这些信息并非后续课程内容所必需,但有助于更全面地理解该主题。
其他 shell
Bash 并不是唯一的 shell 类型。其他常见的 shell 包括:
shashdashkshtcshzshtclsh
你可能听说过其中一些,或者曾经使用过。这些 shell 虽然看起来相似,但各自有不同的规则、约定、逻辑和历史背景,因此在细节上可能存在微妙差异。
由于其他 shell 本身也是程序,它们可以在彼此之间运行!
以下代码示例展示了如何在终端中启动 tcsh。注意,在运行 tcsh 命令后,你会看到一个不同的提示符。
1tcsh # 进入 tcsh shell 2echo $dirstack # 输出 tcsh shell 中的一个变量 3exit # 退出 tcsh 程序,返回到 bash shell 4echo $dirstack # 该变量在 bash shell 中不存在
请在下方的终端中依次输入上述命令。
注意:在整个课程中,假设你通过按顺序在每节课提供的终端中输入命令来完成学习。
dirstack 变量由 tcsh 设置,运行时会输出有意义的内容。但一旦你通过 exit 退出 tcsh 程序,就回到了 bash shell,而 bash 默认并不具备 dirstack 这个变量。
Bash 的历史
这张图帮助我们了解 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 的历史“父”壳是哪一个?