Linux 中 sh 和 Bash 的区别?

linuxopen sourceoperating system更新于 2026/1/29 22:22:17

Bash 是一种 BourneSh(Bourne Again Shell),它是原始 Bourne Shell 的改进版本。它用于运行 Bash 编程语言的程序,通常被称为 Linux 发行版的"默认 Shell"。Sh 是 UNIX System V 4.0 版的一个简单命令解释器。 Bash 和 sh 都可以用来编写各种语言的脚本,例如 Perl、Python、Ruby、PHP、Java、C++、JavaScript、Tcl、SQL 等。

sh

#!/bin/sh

bash

#!/bin/bash

注意

  • shell 是最终用户和操作系统之间的接口。

  • sh 实现了 shell 命令行解释器。

  • bash 是 sh 的超集。

Sh

Bash 也称为 Bourne shell。sh 是由 POSIX 标准描述的命令行 shell 程序。它适用于 Linux、Mac OS X 和基于 Unix 的 BSD 操作系统。实现它的方法有很多种。在大多数操作系统(包括 Linux)上,sh 由称为"shell"的程序实现,例如 bash、zsh 和 csh。Bash 是一个 shell 脚本解释器。/bin/sh 链接到其主实现。符号链接是指向另一个文件的文件。

sh 本身不是一种计算机编程语言。sh 是一份详细的 Shell 编程语言语法和语义规范。 它不包含任何代码。sh 是内置于大多数现代 Linux 发行版中的 Shell。

我们可以使用 sh,因为它兼容多种操作系统。即使 bash 不向后兼容 sh,如果 Bash 脚本也是为 bash 编写的,通常也能正常工作。sh 是 POSIX/UNIX/LINUX 操作系统平台上使用最广泛的脚本语言。 sh 的一个优点是它存在于每个 Unix 系统上。

bash

Bash 也是一种像 sh 一样的命令编程语言。Bash 现在是基于 Linux 的操作系统上的默认用户登录 Shell。Bash 是 Bourne sh Shell 的 GNU 替代品 sh 命令行解释器的扩展版本。

我们也可以说 bash 是一种编程语言。我们可以在交互式会话中启动 Python,它的行为就像命令行界面 (CLI),但我们也可以在任何文本编辑器中执行 Python 脚本。

bash 是 sh 的超集。这意味着 bash 支持 sh 的功能并添加了额外的功能。虽然大多数命令的工作方式与 sh 相同,但 bash 不是符合 POSIX 标准的命令行解释器。它是 POSIX 命令行界面的一种方言(子集)。Bash 可以在交互式终端中运行,并允许用户执行命令。它拥有 Bourne-Again SHell 语言家族中最强大的功能集,包括文件重定向、进程替换、环境变量扩展、历史记录扩展、算术求值、命令分组等等。

与 GNU 软件(例如提供其他 Shell 的 GNU coreutils,包括 csh 的实现)一样,Bourne Again SHell 是标准的 Unix Shell。Bourne Again SHell 的设计与最初的 AT&T UNIX System V Release 4.0 BSD 操作系统兼容。与其他 GNU 软件一样,Bourne Again SHell 的开发也考虑到了跨平台移植。这意味着它可以在任何运行相应操作系统的计算机上运行。

sh 和 bash 的区别

bash sh
Bourne Again SHell SHell
#!/bin/bash #!/bin/sh
由 Brain Fox 开发 由 Stephen R. Bourne 开发
sh 的后继者 的前身bash
bash 是默认的 Shell sh 不是默认的 Shell
支持作业控制。 不支持作业控制。
bash 不是有效的 POSIX Shell。 sh 是有效的 POSIX Shell
Bash 脚本是专门为 Bash 编写的脚本 Shell 脚本是在任何 Shell 中编写的脚本
支持命令历史记录。 不支持命令历史记录。

结论

我们已经看到教程介绍了 Linux 中 sh 和 Bash 命令之间的一些主要区别。


相关文章


有用资源