Linux 中 sh 和 Bash 的区别?
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 命令之间的一些主要区别。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

