Andy White Asked: 2009-05-07 22:08:57 +0800 CST2009-05-07 22:08:57 +0800 CST 2009-05-07 22:08:57 +0800 CST Unix shell 的比较 772 在主要的 Unix shell(bash、ksh、tcsh、zsh 等?)中,是否有任何令人信服的理由来使用一个而不是另一个? 哪个是最交互/命令行友好的? 哪个是编写脚本最有利于/直观的? 是否有任何一个 shell 提供而其他 shell 不提供的主要内置功能? 这些shell中的任何一个真的对一种功能有好处,但对另一种没有好处吗?还是它们都非常全面/灵活? 这只是个人喜好问题吗? 如果有人愿意,我可以制作这个社区 wiki。 linux unix shell 8 个回答 Voted Best Answer vartec 2009-05-08T00:05:50+08:002009-05-08T00:05:50+08:00 当前的: bash— Bourne again shell,大多数 Linux 发行版中的默认 shell。体面的特征; zsh— 功能最丰富,但仍然很少使用; ksh— Solaris、AIX 和其他少数几个 unice 中的默认 shell; tcsh— 各种 *BSD 风格的 unice 中的默认 shell; 历史性: sh— 原始 Bourne shell(1977 年发布)。被 bash 淘汰; csh— 原始 C shell(1978 年发布)。被 tcsh 和 ksh 淘汰; 请注意,bash、ksh 和 zsh 派生自 sh 语法,而 tcsh 派生自 csh 语法。这是两种完全不同的语法。 功能图表(维基)。 Peter Hilton 2009-05-07T23:21:36+08:002009-05-07T23:21:36+08:00 fish是一个新的 shell,它可能比其他 shell 更有趣,不是因为它一定有更多的特性,而是因为它们默认情况下只是工作,而且因为 fish 致力于可用性。 几张截图(1 , 2 , 3 , 4)足以给出大致的想法。 fish 现在是我工作时 Mac 上的默认 shell。去搞清楚。 kquinn 2009-05-08T01:44:39+08:002009-05-08T01:44:39+08:00 如果你要学习除sh/以外的 shell bash,你还不如去学习zsh. 我认为没有人认真争论它是替代 shell 中最强大和功能最丰富的。当然,是否只是臃肿还有待商榷。 我听说过关于fish的好消息,但从未努力去打扰它们。 我认识的管理员认为csh并且tcsh是可憎的,应该不惜一切代价避免,我同意他们的观点,尽管从未被迫让自己经历任何一个外壳。 Kyle Brandt 2009-05-14T09:54:00+08:002009-05-14T09:54:00+08:00 我建议您了解 bash,因为它是最常见的一种(通常是 Linux 默认值)。就个人而言,我喜欢 zsh 作为我的交互式 shell。它具有出色的完成功能。例如,您可以设置主机列表,当您执行类似 ssh Ser[tab] 之类的操作时,它会知道尝试使用选项卡自动完成其中一个主机。它还具有递归全局,因此如果您想在当前目录和子目录中查找所有 jpeg 文件,您可以使用ls -ld **/*.jpg. zsh 有很多有趣的功能(搜索人们的 .zshrc 文件),您可以将其设置为“bash compatible”,因此可以很容易地在两者之间切换。如果您将它与 GNU Screen 结合使用,您可能会发现命令行变得非常有趣。 David Z 2009-05-07T22:43:20+08:002009-05-07T22:43:20+08:00 不要忘记您的其他问题最常见的 Unix/Linux shell - 最流行的 shell 可能是最流行的;-) 对于它的价值,大多数人不会经常在 shell 之间切换,因此很难对各种选项进行全面比较;您将更有可能看到不同的人拥护他们最喜欢的贝壳的优点。根据我对不同 shell 的了解,它们都提供了一些相同的基本功能(如 I/O 重定向、命令历史记录等),因此个人偏好可能是一个很大的组成部分。 unhappyCrackers1 2012-07-06T07:16:22+08:002012-07-06T07:16:22+08:00 使用 ZSH 的一个没有被提及的令人信服的理由是 vi 模式和 emacs 模式。 对于那些喜欢在 shell 中使用 vi 肌肉记忆的人来说,这是一个杀手级功能。 对于那些喜欢 emacs 的人,您也可以使用这些键绑定,但真正的 emacs 信徒可能会说 emacs 是他们最喜欢的 shell。 ;-) Vincent De Baere 2009-05-07T22:44:15+08:002009-05-07T22:44:15+08:00 日常使用的偏好确实是个人喜好的问题,但是,在编写脚本时,为了可移植性,我尽量兼容 posix。 lImbus 2009-05-21T09:57:24+08:002009-05-21T09:57:24+08:00 就像抬头一样:Ubuntu 默认“sh”为“dash”,这导致过去与 POSIX 兼容性存在一些问题。显然, echo 命令略有不同。
当前的:
bash
— Bourne again shell,大多数 Linux 发行版中的默认 shell。体面的特征;zsh
— 功能最丰富,但仍然很少使用;ksh
— Solaris、AIX 和其他少数几个 unice 中的默认 shell;tcsh
— 各种 *BSD 风格的 unice 中的默认 shell;历史性:
sh
— 原始 Bourne shell(1977 年发布)。被 bash 淘汰;csh
— 原始 C shell(1978 年发布)。被 tcsh 和 ksh 淘汰;请注意,bash、ksh 和 zsh 派生自 sh 语法,而 tcsh 派生自 csh 语法。这是两种完全不同的语法。
功能图表(维基)。
fish是一个新的 shell,它可能比其他 shell 更有趣,不是因为它一定有更多的特性,而是因为它们默认情况下只是工作,而且因为 fish 致力于可用性。
几张截图(1 , 2 , 3 , 4)足以给出大致的想法。
fish 现在是我工作时 Mac 上的默认 shell。去搞清楚。
如果你要学习除
sh
/以外的 shellbash
,你还不如去学习zsh
. 我认为没有人认真争论它是替代 shell 中最强大和功能最丰富的。当然,是否只是臃肿还有待商榷。我听说过关于
fish
的好消息,但从未努力去打扰它们。我认识的管理员认为
csh
并且tcsh
是可憎的,应该不惜一切代价避免,我同意他们的观点,尽管从未被迫让自己经历任何一个外壳。我建议您了解 bash,因为它是最常见的一种(通常是 Linux 默认值)。就个人而言,我喜欢 zsh 作为我的交互式 shell。它具有出色的完成功能。例如,您可以设置主机列表,当您执行类似 ssh Ser[tab] 之类的操作时,它会知道尝试使用选项卡自动完成其中一个主机。它还具有递归全局,因此如果您想在当前目录和子目录中查找所有 jpeg 文件,您可以使用
ls -ld **/*.jpg
. zsh 有很多有趣的功能(搜索人们的 .zshrc 文件),您可以将其设置为“bash compatible”,因此可以很容易地在两者之间切换。如果您将它与 GNU Screen 结合使用,您可能会发现命令行变得非常有趣。不要忘记您的其他问题最常见的 Unix/Linux shell - 最流行的 shell 可能是最流行的;-)
对于它的价值,大多数人不会经常在 shell 之间切换,因此很难对各种选项进行全面比较;您将更有可能看到不同的人拥护他们最喜欢的贝壳的优点。根据我对不同 shell 的了解,它们都提供了一些相同的基本功能(如 I/O 重定向、命令历史记录等),因此个人偏好可能是一个很大的组成部分。
使用 ZSH 的一个没有被提及的令人信服的理由是 vi 模式和 emacs 模式。
对于那些喜欢在 shell 中使用 vi 肌肉记忆的人来说,这是一个杀手级功能。
对于那些喜欢 emacs 的人,您也可以使用这些键绑定,但真正的 emacs 信徒可能会说 emacs 是他们最喜欢的 shell。
;-)
日常使用的偏好确实是个人喜好的问题,但是,在编写脚本时,为了可移植性,我尽量兼容 posix。
就像抬头一样:Ubuntu 默认“sh”为“dash”,这导致过去与 POSIX 兼容性存在一些问题。显然, echo 命令略有不同。