大多数最新的 Linux 发行版都将 bash 作为默认 shell,尽管还有其他(可以说)更好的 shell 可用。
我想了解这是否是一些历史遗留问题,没有人愿意改变,或者是否有一些充分的理由使 bash 成为首选?
答案1
简短的回答是因为 Linux 确实是 GNU/Linux。只有内核是 linux,但提供类 Unix 环境的实用程序的基本集合由GNUGNU shell 是巴什
正如我所说,这是简短的答案;)
编辑添加一些额外的评论...
让我前缀说我不是 Unix 历史学家,所以我只能回答恕我直言
几点,首先bash是shell的厨房水槽,就像emacs对于编辑器一样。
在 bash 发布时,还没有免费的 ksh 实现,tcsh 是免费的 csh 替代品,但 Stallman 强烈反对 csh 的 shell 编程。
作为一个交互式 shell,bash 具有出色的历史记录/命令回忆能力,并且可以保存会话之间的历史记录。它是 shell 编程中 sh、bsh、ksh 的替代品,并且是一个不错的交互式 shell。
就像滚下山坡的雪球一样,bash 已经获得了动力和规模。
是的,还有几十种其他的贝壳;更适合个人目的或口味的 shell,但对于单一的全能 shell bash 来说做得不错,并且 20 多年来一直受到很多人的关注。
答案2
Bash 有一些潜在的竞争对手:
- 兹什拥有更先进的交互设施,但在脚本编写方面有一些怪癖(现在比以前少了)。在 20 世纪 90 年代初到中期,Linux 还处于起步阶段,zsh 几乎无人知晓。
- 克什自 20 世纪 80 年代中期以来,它一直是商业 unice 的事实上的标准,但直到 2000 年它都是专有软件,因此在 Linux 上不是一个选项。此外,与 bash 相比,ksh 的命令行编辑功能较差。
- 磷酸二氢钾,ksh 的免费克隆,本来是一个选择,但它并不知名,并且命令行编辑功能很差。 (Pdksh 不再是一个非常活跃的项目,尽管它仍然在一些 BSD 中使用,但现在 ATT ksh 是免费的。)
- 一些发行版安装了灰变体为
/bin/sh
. Ash(我的意思是任何称为 ash 的松散 shell 系列)被设计为小而快,没有交互功能(它仅用于编辑脚本)。火山灰的复兴是相对较新的事情;在 20 世纪 90 年代,现有的变体缺乏很多功能。 - 特切什在 zsh 出现之前,它是最先进的交互式 shell,但它与 sh 和不太擅长编写脚本。
此外bash是官方的GNUshell 和 Linux 系统确实GNU/Linux:许多核心程序都来自 GNU,即使最知名的部分 Linux 内核并非如此。当 bash 成为事实上的标准时,它很出名,具有官方地位,并且拥有一套不错的功能。
答案3
最简单的答案?因为有些东西“必须是”默认的。最明智的默认设置是大多数用户已经习惯的默认设置。从这一点来看,Bash 是一个不错的选择。每个人都有选择自己世界中最好的自由。如果默认值始终满足他们的需要,大多数人会选择使用默认值。
答案4
所有其他答案都很好,但从实际的角度来看:如果我坐在一个不熟悉的系统前(或远程访问它)并且我需要做一些事情,我可以指望 bash 在除最旧的系统之外的所有系统上都可用。我可以继续把事情做好。
正如其他答案和您的问题中所指出的,还有很多其他 shell(我听到了很多关于 zsh 的好消息,但还没有尝试过。),但它们在语法方面有所不同,有时在使用的命令方面也有所不同把事情做好。如果我只是想完成某件事,bash 就足够棘手了,无需适应另一个 shell。
另外,当我编写一个可能普遍有用的 shell 脚本时,我是为 bash 编写的,并且我知道如果我非常小心不做与系统相关的事情,那么它几乎可以在任何地方运行。