本文最后更新于 2024-06-26,文章内容可能已经过时。

以前一直在centos中,大多数时候sh和bash没区别

但现在使用里deepin,是debian系统就出现问题哩。

比如:数组的定义 在bash中使用(),sh中使用的是{}

下面是gpt回复

起源与功能:

sh(Shell的缩写)是Unix/Linux系统的默认shell,也是最古老的shell之一。它是标准的POSIX shell,具有许多不同版本和实现,如Bourne shell和POSIX shell。POSIX(Portable Operating System Interface)是一个为各种UNIX系统定义的标准接口。

bash(Bourne-Again Shell的缩写)是sh的增强版,提供了更多的功能和选项。它支持命令自动补全、历史记录、别名、作业控制等特性,是大多数Linux发行版及macOS系统的默认shell。

兼容性:

bash兼容大多数脚本,不需要经过修改就可以在bash环境中执行。这意味着,如果你有一个为bash编写的脚本,它通常也可以在sh环境中运行,尽管可能无法使用bash特有的功能。

相反,不是所有为sh编写的脚本都能在bash环境中完美运行,尤其是当脚本使用了sh特有的功能或语法时。

默认行为:

在许多系统中,/bin/sh是一个指向/bin/bash的软链接,这意味着当你使用sh命令时,实际上可能是在运行bash。然而,在Debian系统及其衍生版本中,/bin/sh通常是指向/bin/dash的,dash是Debian Almquist shell的缩写,是一个轻量级的shell,专门为Debian发行版而设计,提供了较少的特性但启动更快。

错误处理:

/bin/sh(通常是POSIX shell)在遇到错误时通常会终止脚本的执行。相比之下,bash即使遇到错误也会继续向下执行。

总的来说,sh和bash的主要区别在于它们的起源、功能、兼容性以及错误处理方式。选择使用哪一个取决于你的具体需求,例如脚本的兼容性、功能的需要以及性能的考虑。