bash与zsh相比的独特功能


67

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

  • 如果您已经熟悉它,并且不想学习新的语法。
  • 默认情况下,它将在大多数* nix机器上都存在,而zsh可能是额外的安装。

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


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

Answers:


40

zsh适用于火神。;-)

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

% ls /usr/src/**/Makefile

等效于:

% find /usr/src -name "Makefile"

但显然更强大。

以我的经验,至少在某些情况下,bash的可编程完成性能比zsh更好(例如,为适应性而完成debian软件包)。

bash必须Alt + .插入!$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>

for this. zsh can also expand a command in backtics, so

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

yields

% cat blabb

I find it very useful to expand rm *, as you can see what would be removed and can maybe remove one or two files from the commmand to prevent them from being deleted.

Also nice: using the output from commands for other commands that do not read from stdin but expect a filename:

% diff <(sort foo) <(sort bar)

From what I read bash-completion also supports completing remote filenames over ssh if you use ssh-agent, which used to be a good reason to switch to zsh.

Aliases in zsh can be defined to work on the whole line instead of just at the beginning:

% alias -g ...="../.."
% cd ...

8
在bash中,C-M-e以“面扩大线”,这将扩大cat `echo blubb | sed 's/u/a/'` cat blabbecho $SHELLecho /bin/bash我的情况。另外,C-x *将其扩展为“ glob-expand-word” rm *
维克多

16

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

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


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

@kubanczyk:如果您在没有root访问权限的计算机上工作,则安装起来可能不是那么容易,所以我认为X-Istence就是这样。(我在一堆Solaris机器上工作,而sysadmin都是ksh迷。上次我尝试编译自己的软件时,我的生活离不开(在这种情况下为git),安装的编译器存在缺陷,因此即使那条路线被切断给我。)
iconoclast

12

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

记得:

  • PS1:左对齐提示
  • RPS1:右对齐提示

样品:

当使用类似

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

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

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


9

Zsh具有拼写更正功能。如果您不满意(或更多),它会明白您的意思。

我还喜欢它更强大的制表符完成功能。

Zsh有一个交互式的配置实用程序,可以根据您的喜好进行设置。

一些速度测试说zsh更快,但是我没有注意到任何区别。


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

zsh甚至具有允许Dvorak键盘使用“输入一个字母”错误键入的设置。
vgoff 2015年

6

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

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

我终于可以在每个Unix系统上使用相同的外壳程序,对于我将永远不会使用的功能,不值得破坏它。

在bsh中不存在的zsh中存在的功能似乎大部分都很可爱,但在日常中并不重要。


3

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


1

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


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

0

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

有人还说我正在通过使用zsh来表达我的怪才,但我无法证实或否认这一谣言。


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

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

-1

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


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

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

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

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

-1

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


1
if [[ $test = "test" ]]; then echo "success"; else echo "failure"; fi在命令行和脚本上都使用了它,并且在两种情况下都按预期工作。因此,似乎您没有事实依据。
iconoclast

这取决于您以/ bin / sh安装的内容。如果/ bin / sh是bash,那么您是对的。否则,bash没有这个优势。如果zsh是/ bin / sh,则zsh具有此优点。考虑到可以提供/ bin / sh的所有不同外壳程序,我个人建议仅使用所需的外壳程序进行外壳程序脚本编写,这样,如果缺少该外壳程序,就可以指出具有明显修复问题,而不是无所作为的怪异行为。解决。
Ed Grimm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.