摘要:当谈到 shell 脚本编写时,经常出现两个突出的 shell,Bourne shell (SH) 和 Bourne Again shell(Bash)。两者都是基于 unix 和 linux 的系统的组成部分,提供与操作系统交互的接口。本文旨在深入研究这两种
SH vs BASH
当谈到 shell 脚本编写时,经常出现两个突出的 shell,Bourne shell (SH) 和 Bourne Again shell
(Bash)。两者都是基于 unix 和 linux 的系统的组成部分,提供与操作系统交互的接口。本文旨在深入研究这两种 shell 之间的复杂差异,揭示它们的独特特征,并提供比较分析,以帮助您了解何时以及为什么使用其中一种。
Bourne shell (SH) 是在 20 世纪 70 年代作为 Unix 的主要 shell 引入的。贝尔实验室的 Stephen
Bourne 开发了它,因此得名。SH 以其简单性和可移植性而闻名。当创建可能在各种 Unix 衍生产品上执行的脚本时,它是一个可靠的选择。
Bourne Again shell (Bash) 它是原始 SH 的改进版本,由 Brian Fox 为 GNU 项目开发,作为 Bourne
Shell 的自由软件替代品。Bash 是许多 Linux 发行版和 macOS 的默认 shell。它包含了 KornShell (ksh) 和 C shell (csh) 等其他 shell 的特性,提供了更健壮的功能和脚本功能。
(1) Syntax differences
与 SH 相比,Bash 提供了更多的简写和增强的脚本语法。例如:在 Bash 中,您可以使用双方括号语法 进行测试,它比 SH 中使用的单方括号语法 更健壮和安全。
SH Syntax:
if [ $a -lt $b ]; thenecho "$a is less than $b"fiBash Syntax:
if [[ $a -lt $b ]]; thenecho "$a is less than $b"fi(2) Array Variables
Bash 支持数组变量,而 SH 不支持。当您需要处理存储在单个变量名称下的多个值时,数组非常有用。
Bash Syntax:
array=("apple" "banana" "cherry")echo ${array[1]} # Outputs "banana"(3) Command Line Editing
Bash 支持命令行编辑,而这在 SH 中不是标准的。在 Bash 中,您可以使用箭头键导航命令历史,使用退格键删除文本,并使用制表符补全文件名和命令名。
(4) Shell Options
与 SH 相比,Bash 提供了额外的 shell 选项。例如:Bash 中的 shopt 命令提供了更改其他 shell 可选行为的能力,这在 SH 中是不可用的。
(5) Process Substitution
Bash 支持进程替换 ((command)),允许使用文件名引用进程的输入或输出。这个特性在 SH 中不可用。
Bash Syntax:
diff(6) Command not found Hook
Bash 有一个特殊的 shell 函数 command_not_found_handle,当命令未找到时执行该句柄。这个特性在 SH 中不可用。
(7) Here Strings
Bash 支持“Here Strings”,I/O 重定向的一种形式,允许将字符串用作由 表示的命令的输入,此功能在 SH 中不可用。
Bash Syntax
wc -l如果您正在创建一个需要在各种 Unix 系统上运行的脚本,由于其可移植性和兼容性,SH 可能是更好的选择。但是,如果您在 Linux 或 macOS 系统上工作,并且需要额外的特性和语法增强,Bash 是首选 shell。
酷瓜云课堂 - 开源知识付费解决方案
来源:鸠摩智首席音效师