Linux 中 sh 和 Bash 的区别?
Bash 是 BourNeSh(Bourne Again ShEl)的缩写,它是原始 Bourne shell 的改进版本。它用于在 Bash 编程语言中运行程序,通常被称为 Linux 发行版的“默认 shell”。Sh 是 UNIX System V Release 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 和基于 BSD Unix 的操作系统上运行。有许多不同的方法来实现它。在大多数操作系统(包括 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 是 GNU 为 Bourne sh shell 提供的替代方案的 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 的实现)一样,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 中编写的脚本 |
支持命令历史记录。 | 不支持命令历史记录。 |
结论
在本教程中,我们看到了 sh 和 Bash 命令在 Linux 中的一些主要区别。