我已经是zsh用户了一段时间(在tcsh之前和csh之前)。我对此非常满意,但是想知道zsh中是否存在bash的任何引人注目的功能。相反,还有bsh中不存在的zsh功能。我目前的感觉是bash更好:


如果您已经熟悉bash并且不想学习新的语法。
bash几乎将存在*默认情况下为nix机器,而zsh可能是一个额外的安装。

不试图在这里发动一场宗教斗争,这就是为什么我只是在寻找仅存在于其中一个外壳中的功能。

评论

主观上独有的功能如何?老实说,我并不是在寻找烈火,并且认为彼此之间的熟悉可能是选择该外壳的一个很好的理由。

#1 楼

zsh适用于火神。 ;-)

认真地:
bash 4.0具有以前仅在zsh中发现的一些功能,例如** globbing:

% ls /usr/src/**/Makefile


等效于:

% find /usr/src -name "Makefile"


,但功能显然更强大。以我的经验,bash的可编程完成比zsh更好,至少在在某些情况下(例如,为aptitude完成debian软件包的安装)。

bash具有Alt + .来插入!$ zsh has expansion of all variables, so you can use e.g. q4312078q for this. zsh can also expand a command in backtics, so q4312078q yields q4312078q I find it very useful to expand rm *,因为您可以看到将要删除的内容,并且可以从命令中删除一个或两个文件以防止它们被删除

也很好:将命令的输出用于其他未从stdin读取但需要文件名的命令:

% rm !$<Tab>


据我了解,如果您使用ssh-agent,bash-completion还支持在ssh上完成远程文件名,这曾经是切换到zsh的一个很好的理由。

可以定义zsh中的别名整行而不是刚开始:

% cat `echo blubb | sed 's/u/a/'`<Tab>



评论


在bash中,将C-M-e更改为“ shell-expand-line”,这将扩展cat`echo blubb | sed's / u / a /'`为猫blabb,并在我的情况下回显$ SHELL以回显/ bin / bash。同样,将C-x *转换为“ glob-expand-word”,这将扩展rm *。

–维克多
11年8月13日在21:31

#2 楼

我想指出的是,bash在FreeBSD,OpenBSD或NetBSD上默认未安装,并且在Solaris 10上也未默认安装bash(OpenSolaris已将其作为默认值),这是我上次使用AIX的原因,或者HP-UX服务器也默认未安装。

此外,在OpenSolaris上,/ bin / sh也不是bash。是ksh。作为软件搬运工,我最大的问题是人们假设/ bin / sh是bash,并且将接受bash扩展语法。尽管在大多数Linux发行版中似乎都是这种情况,但在其他地方则不是这种情况,这确实很烦人。

评论


是的,你是对的。 las,所有这些供应商都确保将bash作为一个额外的软件包非常容易安装。 +1指出在脚本中需要使用/ bin / sh pureism。

– Kubanczyk
09年8月22日在11:04

@kubanczyk:如果您在没有超级用户访问权限的计算机上工作,则安装起来可能不是那么容易,所以我认为X-Istence就是这样。 (我在许多Solaris机器上工作,而sysadmin都是ksh迷。上次我尝试编译自己的软件时(如果没有git,本来就无法生存),安装的编译器存在缺陷,因此即使那条路被切断给我。)

–iconoclast
2011年7月14日在18:08

#3 楼

尽管我是bash用户,但我发现zsh的功能之一很酷:RPS1。

记住:


PS1:左对齐提示
RPS1:正确对齐的提示

示例:

使用类似

PS1=’%B(%h) %m%#%b ‘
RPS1=’(%20<…<%~)'


时,您会得到提示左侧,当前目录推入右侧。当当前行太长时,它甚至消失!这是因为zsh足够聪明,可以为RPS1赋予低优先级。

您可以在http://imgur.com/OAZhC上看到此示例的屏幕截图。

#4 楼

Zsh具有拼写更正功能。如果您还没来信(或更多),它将明白您的意思。

它还具有更强大的制表符补全,我喜欢。

Zsh具有一个交互式的配置实用程序,以获取您喜欢的设置。

一些速度测试表明zsh更快,但我没有发现任何区别。

评论


破折号的精简版仅支持部分功能,设计用于应快速运行的脚本(例如,启动脚本)。

–Chucky
13年3月20日在13:44

zsh甚至具有允许Dvorak键盘使用的“一个字母掉”错误类型的设置。

–vgoff
2015年4月5日下午4:53

#5 楼

我不知道zsh不支持的任何bash功能。 zsh的设计目标似乎包括支持bash添加的所有功能。

我仍然使用bash代替zsh。我很少遇到zsh支持bash不支持的引人注目的功能。多年来zsh偶尔出现的问题,或者它在某些系统上并不存在,因此不值得进行过渡。

我终于可以在每个Unix系统上使用相同的shell,这是不值得的对于我永远不会使用的功能。

bsh中不存在的zsh中存在的功能似乎大部分都是可爱的,但并不是每天都重要的功能。

#6 楼

bash具有许多以前仅在zsh中使用的功能。正如任何最近的ubuntu用户所发现的,您现在也可以使用bash进行“智能选项卡补全”。

#7 楼

进程替换和扩展的globbing是我最想念的两个功能。
提示设置也很酷-在命令行上键入复杂的语句时,可以看到嵌套的级别。
自动加载使在每个shell中包含很多功能成为可能。

评论


我想您是说您会错过zsh的那些内容,因为AFAIK您提到的所有内容都包含在zsh中? (但是您确定他们都没有参加bash吗?这会让我感到惊讶。)无论如何,加上bash / zsh栅栏的两侧都有人回答,这将使您的答案更加清晰。另外,如果您提供一些示例,说明每个功能如何使您的外壳寿命更容易,将对您有所帮助。

–iconoclast
2011年7月14日在18:24

#8 楼

由于vi模式的支持,我是zsh的粉丝,但是我发现它的使用不是很广泛。我想我读过zsh喜欢从其他shell中吸收流行的功能并将它们组合在一起(因此zsh中提供了bash特有的功能和csh特有的功能)。

有人还说我m通过使用zsh来改变我的怪胎因素,但我无法证实或否认该谣言。

评论


是的,bash也具有vi模式支持。

– pjz
09年5月5日在21:15

@Milner:您能解释一下zsh中不支持bash的vi模式支持吗?如果您只是想在命令行中设置-o vi的功能,那么这两者显然都是如此。如果zsh中有一些扩展的支持,您能否清楚地描述它是什么以及它增加了什么?

–iconoclast
2011年7月14日在18:28

#9 楼

人气#bash 430用户。 #zsh 123位用户。我相信zsh网站将zsh与其他shell进行了很好的比较。 zsh具有更好的vi模式支持。

评论


zsh中的vi模式如何更好?我是bash用户,并且启用了vi-mode,因此我想知道切换是否有任何好处。

–ptman
2010年5月16日在12:54

@ptman:可以使zsh提示以告知模式(插入/正常)。 Readline无法做到这一点。提示器也更加灵活:您可以突出显示语法等!

–mike3996
2011年3月17日17:00

@progo:啊!非常好。现在我可能会开始在zsh中使用vi模式。到目前为止,这是我坚持使用emacs模式的原因之一。

–iconoclast
2011年7月14日在18:30

@Brandon一点改进就是我更换外壳的原因。

–mike3996
2011年7月14日在21:30

#10 楼

Bash对if和while使用相同的语法,该语法可以在命令行上的/ bin / sh脚本中使用。
在zsh中,语法不同。有效地使用zsh,如果您在命令行上使用if或while语句,则必须记住两者

评论


我尝试使用if [[$ test =“ test”]];然后回显“成功”;否则回声“失败”; fi在命令行和脚本上均正常运行,并且在两种情况下均按预期工作。因此,似乎您没有事实依据。

–iconoclast
2011年7月14日在18:17



这取决于您作为/ bin / sh安装的内容。如果/ bin / sh是bash,那么您是对的。否则,bash没有这个优势。如果zsh是/ bin / sh,则zsh具有此优点。考虑到可以提供/ bin / sh的所有不同外壳程序,我个人建议仅使用您想要的外壳程序进行外壳程序脚本编写,这样,如果缺少该外壳程序,便会指出具有明显修复问题的问题,而不是无所作为的怪异行为解决。

–爱德·格林
19年4月11日在2:54