Bash Features(专题)
本文简要描述了 Bash shell(版本 5.2,2022 年 9 月 19 日)中的功能。 Bash 主页是 http://www.gnu.org/software/bash/ 。
这是 5.2 版,最后更新于 2022 年 9 月 19 日,GNU Bash 参考手册,适用于 Bash ,版本 5.2。
Bash 包含出现在其他流行 shell 中的功能,以及一些仅出现在 Bash 中的功能。 Bash 引用的一些 shell 功能, Bourne Shell (sh)、Korn shell (ksh)和 C shell(csh及其扩展版本,tcsh)。以下菜单将功能分为几类,注明哪些功能是受其他 shell 启发的,哪些是 Bash 特有的。
本手册旨在简要介绍 Bash 的功能。 Bash 手册页应用作 shell 行为的权威参考。
第一部分 Introduction(介绍
)
什么是bash?
Bash 是 GNU 操作系统的 shell 或命令语言解释器。该名称是 "Bourne-Again Shell"的缩写,这是对 Stephen Bourne 的双关语,Stephen Bourne 是当前 的最早版本的作者,Unix shell sh出现在 Unix 的第七版贝尔实验室研究版本中。
Bash 在很大程度上与 sh 兼容,并融合了 Korn shell ksh 和 C shell csh 的有用功能。它力求遵循 IEEE POSIX 规范(IEEE 标准 1003.1)的 《Shell 和实用工具》规范。它在交互和编程使用方面比 sh 提供了更强的功能。
虽然 GNU 操作系统提供了其他 shell,包括 csh 版本,但 Bash 是默认 shell。与其他 GNU 软件一样, Bash 非常易于移植。目前,它几乎可以在 Unix 的每个版本和一些其他操作系统上运行,在MS-DOS、OS/2 和 Windows 平台都有可以运行的移植版本。
什么是shell?
从本质上讲,shell 只是一个执行命令的宏处理器。术语"宏处理器"是指扩展文本和符号以创建更大表达式的功能。
Unix shell 既是命令解释器又是编程语言。作为命令解释器,shell 为丰富的 GNU 实用工具提供了用户界面。编程语言功能允许组合这些实用工具。可以创建包含命令的文件,并将其本身变成命令。这些新命令与目录中的系统命令具有相同的地位,例如/bin,允许用户或组建立自定义环境来自动执行其常见任务。
Shell 可以交互式或非交互式地使用。在交互模式下,它们接受从键盘输入的输入。当非交互执行时,shell 执行从文件读取的命令。
shell 允许同步和异步执行 GNU 命令。shell 在接受更多输入之前等待同步命令完成;当 shell 读取和执行其他命令时,异步命令继续与 shell 并行执行。重定向结构允许对这些命令的输入和输出进行精准的控制。此外,shell 允许控制命令环境的内容。
Shell 还提供一组内置命令 (builtins),实现通过单独的实用程序不可能或不方便获得的功能。例如, cd 、 break 、 continue 和 exec 是无法在 shell 外部实现,因为它们直接操作 shell 本身。 history 、 getopts 、 kill 或 pwd 内置命令等可以在单独的实用程序中实现,但它们作为内置命令使用更方便。所有 shell 内置函数将在后续部分中进行描述。
虽然执行命令至关重要,但 shell 强大(灵活)之处在于其内置了编程语言。与任何高级语言一样,shell 提供变量、流程控制结构、引用和函数。
Shell 提供专门用于交互使用的功能,这些功能不是用来增强shell编程功能。这些交互功能包括作业控制、命令行编辑、命令历史记录和别名。本手册中将一一描述了这些功能。
第二部分 Definitions(定义、名词解释)
本手册的其余部分均使用这些定义。
POSIX UNIX 可移植标准
基于 Unix 的可移植性(开放系统)标准系列。 Bash 主要涉及 POSIX 1003.1 标
准的《Shell 和实用工具》部分。
blank 空白符
空格或制表符。
builtin 内建命令
shell 本身内部实现的命令,而不是由文件系统中某处的可执行程序实现。
control operator 控制运算符
执行控制功能的 标记(token) 。它是 newline 或以下之一:'||', '&&', '&', ';', ';;', ';&', ';;&', '|', '|&', '(', 或者 ')'.
exit status 返回值
命令返回给调用者的值。该值限制为 8 位(bit位,二进制位),因此最大值为 255。
field 字段
一种文本单元,是 shell 扩展之一的结果。扩展后,执行命令时,结果字段将用作命令名称和参数。
filename 文件名
用于标识文件的字符串。
job 作业
包含管道的一组进程以及从该管道派生的所有进程,它们都位于同一进程组中。
job control 作业管理
一种机制,用户可以通过该机制有选择地停止(挂起)和重新启动(恢复)进程的执行。
metacharacter 元字符
当不加引号时,用于分隔单词的字符。元字符是 space 、 tab 、 newline 或以下字符之一: '|', '&', ';', '(', ')', '<', 或者 '>'.
name 名字
word 仅由字母、数字和下划线组成,并且以字母或下划线开头。 Name 用作 shell 变量和函数名称。也称为 identifier 。
operator 运算符
控制运算符(control operator) 或 重定向运算符(redirection operator) 。有关重定向运算符的列表,请参阅 Redirections 。运算符至少包含一个未加引号的 metacharacter 。
process group 进程组
每个具有相同进程组 ID 的相关进程的集合。
process group ID 进程组ID
代表 process group 在其生命周期内的唯一标识符。
reserved word 保留字
对shell有特殊意义的 word 。大多数保留字用于 shell 分支、循环控制结构,例如 for 和 while 。
return status 返回状态
退出状态(exit status) 的同义词。
signal 信号
一种机制,内核可以通过该机制向进程通知系统中发生的事件。
special builtin 特殊内部命令
已被 POSIX 标准归类为特殊命令的 shell 内置命令。
token 标记
被 shell 视为单个单元的字符序列。它是单词(word)或运算符(operator)。
word 单词
被 shell 视为一个单元的字符序列。单词不得包含未加引号的元字符(metacharacters)作命令名称和参数。