在编写shell程序时,我们经常使用/bin/sh和/bin/bash。我通常使用bash,但我不知道它们之间有什么区别。
Bash和sh的主要区别是什么?
用Bash和sh编程时,我们需要注意什么?
在编写shell程序时,我们经常使用/bin/sh和/bin/bash。我通常使用bash,但我不知道它们之间有什么区别。
Bash和sh的主要区别是什么?
用Bash和sh编程时,我们需要注意什么?
当前回答
Linux操作系统提供了不同类型的shell。尽管shell有许多共同的命令,但每种类型都有独特的特性。让我们研究不同种类的常用贝壳。
Sh外壳:
Sh外壳也称为伯恩外壳。Shshell是1977年美国电话电报公司贝尔实验室斯蒂芬·伯恩为Unix计算机开发的第一个shell。它包括许多脚本工具。
Bash外壳:
Bash shell代表Bourne Again shell。Bash shell是大多数Linux发行版中的默认shell,并替代Sh shell(Sh shell也将在Bash shell中运行)。Bashshell可以执行绝大多数Shshell脚本而无需修改,并提供命令行编辑功能。
其他回答
UNIX.COM发布
外壳功能
下表列出了我认为可以让您选择一个外壳而不是另一个外壳的大多数功能。它不是一个明确的列表,也不包括每个可能的外壳的每个可能的特性。只有在操作系统附带的版本中,或者在直接从标准发行版编译的情况下,功能才被视为在shell中。特别是下面指定的C shell是SUNOS4.*上提供的,现在有相当多的供应商提供了tcsh或他们自己的增强型C shell(他们并不总是明显地表明他们正在提供tcsh)。
代码:
sh csh ksh bash tcsh zsh rc es
Job control N Y Y Y Y Y N N
Aliases N Y Y Y Y Y N N
Shell functions Y(1) N Y Y N Y Y Y
"Sensible" Input/Output redirection Y N Y Y N Y Y Y
Directory stack N Y Y Y Y Y F F
Command history N Y Y Y Y Y L L
Command line editing N N Y Y Y Y L L
Vi Command line editing N N Y Y Y(3) Y L L
Emacs Command line editing N N Y Y Y Y L L
Rebindable Command line editing N N N Y Y Y L L
User name look up N Y Y Y Y Y L L
Login/Logout watching N N N N Y Y F F
Filename completion N Y(1) Y Y Y Y L L
Username completion N Y(2) Y Y Y Y L L
Hostname completion N Y(2) Y Y Y Y L L
History completion N N N Y Y Y L L
Fully programmable Completion N N N N Y Y N N
Mh Mailbox completion N N N N(4) N(6) N(6) N N
Co Processes N N Y N N Y N N
Builtin artithmetic evaluation N Y Y Y Y Y N N
Can follow symbolic links invisibly N N Y Y Y Y N N
Periodic command execution N N N N Y Y N N
Custom Prompt (easily) N N Y Y Y Y Y Y
Sun Keyboard Hack N N N N N Y N N
Spelling Correction N N N N Y Y N N
Process Substitution N N N Y(2) N Y Y Y
Underlying Syntax sh csh sh sh csh sh rc rc
Freely Available N N N(5) Y Y Y Y Y
Checks Mailbox N Y Y Y Y Y F F
Tty Sanity Checking N N N N Y Y N N
Can cope with large argument lists Y N Y Y Y Y Y Y
Has non-interactive startup file N Y Y(7) Y(7) Y Y N N
Has non-login startup file N Y Y(7) Y Y Y N N
Can avoid user startup files N Y N Y N Y Y Y
Can specify startup file N N Y Y N N N N
Low level command redefinition N N N N N N N Y
Has anonymous functions N N N N N N Y Y
List Variables N Y Y N Y Y Y Y
Full signal trap handling Y N Y Y N Y Y Y
File no clobber ability N Y Y Y Y Y N F
Local variables N N Y Y N Y Y Y
Lexically scoped variables N N N N N N N Y
Exceptions N N N N N N N Y
上表的键。
Y功能可以使用此外壳完成。
外壳中不存在N功能。
F功能只能通过使用shell函数完成机械装置
L读线库必须链接到shell中才能启用此功能。
上表注释
此功能在原始版本中不存在,但现在已成为几乎是标准的。这一功能是相当新的,因此通常在许多版本的外壳,它正在逐渐进入标准分布。许多人认为这种外壳的Vi仿真是不完整。此功能不是标准功能,但存在非官方补丁执行此操作。名为“pdksh”的版本是免费提供的,但没有AT&T版本的全部功能。这可以通过外壳可编程完成机制完成。仅通过ENV环境变量指定文件。
Shell是用户和操作系统之间访问操作系统服务的接口。它可以是GUI或CLI(命令行界面)。
sh(Bourne shell)是一个shell命令行解释器,用于Unix/Unix类操作系统。它提供了一些内置命令。在脚本语言中,我们将解释器表示为#/bin/sh。它是其他shell如bash(免费/开放)、kash(非免费)最广泛支持的一种。
Bash(又称伯恩外壳)是伯恩外壳的替代品。Bash是sh的超集。Bash支持sh。POSIX是一组定义POSIX兼容系统应如何工作的标准。Bash实际上不是符合POSIX的shell。在脚本语言中,我们将解释器表示为#/bin/bash。
类比:
Shell就像一个接口、规范或API。sh是一个实现Shell接口的类。Bash是sh的一个子类。
Linux操作系统提供了不同类型的shell。尽管shell有许多共同的命令,但每种类型都有独特的特性。让我们研究不同种类的常用贝壳。
Sh外壳:
Sh外壳也称为伯恩外壳。Shshell是1977年美国电话电报公司贝尔实验室斯蒂芬·伯恩为Unix计算机开发的第一个shell。它包括许多脚本工具。
Bash外壳:
Bash shell代表Bourne Again shell。Bash shell是大多数Linux发行版中的默认shell,并替代Sh shell(Sh shell也将在Bash shell中运行)。Bashshell可以执行绝大多数Shshell脚本而无需修改,并提供命令行编辑功能。
什:http://man.cx/sh 猛击:http://man.cx/bash
TL;DR:Bash是sh的超集,具有更优雅的语法和更多的功能。在几乎所有情况下使用Bash-shebang线路都是安全的,因为它在现代平台上非常普遍。
注意:在某些环境中,sh就是Bash。检查sh--版本。
它们几乎相同,但bash有更多的功能——sh(或多或少)是bash的一个子集。
sh通常意味着最初的Bourne shell,它早于bash(Bourne*再次*shell),创建于1977年。但是,在实践中,最好将其视为符合1992年POSIX标准的高度交叉兼容的外壳。
以#!开头的脚本/bin/sh或使用shshell通常是为了向后兼容。任何unix/linux操作系统都会有一个sh shell。在Ubuntu上,sh经常调用dash,而在MacOS上,它是一个特殊的POSIX版本的bash。这些外壳可能是符合标准的行为、速度或向后兼容性的首选。
bash比原来的sh更新,增加了更多的功能,并寻求与sh向后兼容。sh程序通常在bash中运行得很好。bash在几乎所有linux/unix机器上都可用,并且通常在默认情况下使用,但值得注意的是,自Catalina(10.15)起,MacOS默认为zsh。默认情况下,FreeBSD没有安装bash。