我刚刚开始学习 Unix 的基础知识,想知道为什么在类似 Unix 的系统中有这么多 shell。来自Unix 环境中的高级编程一书:
shell 是一个命令行解释器,它读取用户输入并执行命令。shell 的用户输入通常来自终端(交互式 shell)或有时来自文件(称为 shell 脚本)。
然后本书继续列出了一些 shell 程序,如 Bourne shell、Bourne-again shell、Cshell 等。我的问题基本上是为什么我们需要多个外壳?
ger*_*ijk 21
因为人们有不同的需求,在特定情况下有适合您需求的替代方案是很好的。shell 本身只是一个工具,在我看来应该可以被任何其他工具替换。这就是 Unix/Linux 的力量,与 Microsoft Windows 选择的相反。
同样...为什么有这么多的文本编辑器?如果已经有浏览器,为什么人们还要开发新浏览器?为什么会有GNOME、KDE、Xfce、LXDE、E17等?
orm*_*aaj 16
现代 UNIX 环境中使用的大多数 shell 都旨在符合 POSIX sh 规范。POSIX sh 源自原始的 Korn shell (ksh88),后者又源自早期的 Bourne shell,但 POSIX sh 仅指定了 ksh88 功能的一小部分。仅实现最低要求的外壳缺少以安全合理的方式编写除最琐碎脚本之外的所有脚本所需的许多功能。例如,局部变量和数组是非标准的附加项。
因此,第一个原因是使用额外的功能扩展外壳。不同的壳选择专注于不同的事情。例如,Zsh 专注于高级交互功能,而 ksh93(当前的“原始”korn shell)专注于强大的编程功能和性能。即使像 Dash 这样非常小的 shell 也至少添加了一些非标准的附加功能,例如局部变量。
额外的功能很少可以广泛互操作,如果有的话。大多数 ksh88 功能集都具有相当好的互操作性,例如扩展的通配语法,但对于非标准功能,没有任何保证,您必须真正知道自己在做什么才能以可移植的方式使用它们。
第二个原因是遗产。仍然有很多专有 Unix 对其 /bin/sh 使用古老的非标准实现。直到最近,Solaris 仍然使用 Bourne 作为他们的默认设置,并选择维护 Heirloom 外壳而不是升级到现代的外壳。这些系统通常带有您可以切换到的不同 shell,例如通过更改 PATH 变量或更改单个脚本中的 shebang。
所以总结一下。有多个外壳,通常默认情况下: