我很好奇为什么有人要运行bash而不是zsh。我的意思是zsh与bash完全向后兼容。不要误会我的意思:我不喜欢bash或其他任何东西。我只是真的想知道使用它比zsh有什么好处。
那么在zsh上使用bash有什么原因呢?
我很好奇为什么有人要运行bash而不是zsh。我的意思是zsh与bash完全向后兼容。不要误会我的意思:我不喜欢bash或其他任何东西。我只是真的想知道使用它比zsh有什么好处。
那么在zsh上使用bash有什么原因呢?
Answers:
我想到两个原因:
首先-它几乎可以在任何地方使用。我有几个没有安装zsh的Linux系统(在这种情况下为CentOS 4.x)。同样,我必须接触古老的系统,例如Solaris 2.6和更高版本,HP-UX 10和更高版本,以及同样令人毛骨悚然的AIX版本。因此,我几乎必须在这些计算机上使用bash,因为我在一个月的时间内接触了数十台(如果不是几百台)单台计算机,并且为了获得界面的一致性,您最终会被困在默认值。
其次-它几乎可以在任何地方使用。这意味着我可以编写一个bash shell脚本,并有99%的把握确保将其转移到其他地方后也可以使用。
是的,这些原因表面上是相同的,但其背后的原因却不同。
Bash通常随每个系统一起提供,而zsh没有。我喜欢zsh,但是正因为如此,我将zsh用于交互使用,但将Bash用于所有脚本编写。
我发现这使一切变得更简单,因为即使我购物兼容的bash(setopt SH_WORD_SPLIT吗?),我仍然会遇到细微的差异。
zsh不完全兼容bash。有多种差异。较新的zsh与bash更加兼容(支持=〜,exec现在具有额外的标志选项,等等),但是完全兼容不是目标,即使在“仿真”下也不是。
例如,bash子字符串为$ {foo:offset:len},但在zsh中为$ foo [start,end],这只是一个简单的示例。
zsh是受tcsh和ksh影响的shell,它以自己的方式执行许多操作;POSIX兼容性显然不是目标,但开发人员会对补丁做出响应,这些补丁会添加选项/模拟行为,从而使事情更接近POSIX。但是,当您真正开始使用Shell的功能时,您将开始创建只写脚本,甚至比bash更是如此。
bash是POSIX sh + ksh + pedanticism,现在从zsh复制了一些功能。它也具有只写脚本,但由于它的运算符功能较弱,您最终没有使用zsh的简洁性,而且内容可能更具可读性(除了所有引用,以避免空格分隔,愚蠢的 ksh风格$ array表示首先-数组元素,而不是数组所有元素等)。
除非您在受限的环境中(例如,编写系统rc脚本,可能无法挂载某些FS的脚本),否则要充分利用任一shell的功能编写脚本都是不明智的。理想情况下,如果希望其他人能够维护Perl / Python / Ruby / Bourne sh中不需要的表现力,则可以使用Perl / Python / Ruby /任何东西。保留外壳内容以用于与交互式外壳相关的事情(制表符完成编程等)。
我不会在zsh上使用bash。对于简单的脚本,我会在zsh上使用裸露的sh,或者切换到关联数组具有不错的运算符的语言(与zsh不同,它们又是“简洁的”)。我可能会,如果我需要一个小功能扩展现有的成熟工作的脚本,没有时间,现在重写它切换sh脚本来砸。
顺便说一句,您在这里多次被告知,bash实际上到处都是,所以用它来编写可移植脚本,这是错误的。
废话。如果您知道您关心的每个系统都有BASH,那么这是一个非常合理的声明。BASH具有许多有用的功能,这些功能无法在POSIX sh中合理地模拟。轻描淡写地使用非POSIX功能不是一个好主意,但是在真正需要它们时使用它们就可以了。
可移植性不是绝对的。就像其他任何东西一样,这是有争议的。例如,Fedora使用shell命令来构建RPM软件包,而Fedora打包准则指出,由于所有软件包都必须在Fedora上本地构建,因此可以使用BASH的所有功能。即使从理论上讲,没有BASH的其他发行版可能想重用其源RPM,但他们还是基于实用性而不是您的“ ALWAYS UZE POSIX !! 1”口头禅决定了可移植性。
ZSH尚未成为默认外壳,仅仅是因为它是一堆杂乱无章的想法。
顺便说一句,您已经在这里被告知很多次,bash
几乎可以在任何地方找到它,因此请使用它来编写可移植脚本,这是错误的。
编写可移植的unix脚本的正确方法是使用sh
,这在每个* nix系统中都可以找到。
除此以外的所有其他Shell sh
仅仅是您的日常交互工具。
当来到bash
VS zsh
- bash
更多的是捆绑*nixes
比zsh
,所以这里来安装额外的软件系统的缺点-你必须去维护它。有些人喜欢zsh的“酷功能”,所以他们喜欢付这个价钱,有些则不然。
还有一点:
默认情况下,许多程序提供了出色的bash补全功能。对我来说,这是不切换的原因。
[2013年7月添加]自从以上评论以来,在使用zsh数年之后,我不得不说制表符补全(即使是内置的,没有第三次修改)也很出色,而且看起来远远超出了bash提供的那种。 。:)。