Answers:
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 ...
C-M-e
以“面扩大线”,这将扩大cat `echo blubb | sed 's/u/a/'`
到cat blabb
和echo $SHELL
对echo /bin/bash
我的情况。另外,C-x *
将其扩展为“ glob-expand-word” rm *
。
我想指出的是,bash在FreeBSD,OpenBSD或NetBSD上默认未安装,并且在Solaris 10上也未默认安装bash(OpenSolaris将其作为默认值),这是我上次使用AIX的原因,或者默认情况下也未安装HP-UX服务器。
另外,在OpenSolaris上,/ bin / sh不是bash。是ksh。作为软件搬运工,我最大的问题是人们假设/ bin / sh是bash,并且将接受bash扩展语法。虽然在大多数Linux发行版中似乎都是这种情况,但在其他地方则不是这样,这确实很烦人。
尽管我是bash用户,但我发现zsh的一项功能很酷:RPS1。
记得:
样品:
当使用类似
PS1=’%B(%h) %m%#%b ‘
RPS1=’(%20<…<%~)'
您会在左侧看到提示,而当前目录则被推到右侧。当当前行太长时,它甚至消失!这是因为zsh足够聪明,可以为RPS1赋予低优先级。
您可以在http://imgur.com/OAZhC上看到此示例的屏幕截图。
Zsh具有拼写更正功能。如果您不满意(或更多),它会明白您的意思。
我还喜欢它更强大的制表符完成功能。
Zsh有一个交互式的配置实用程序,可以根据您的喜好进行设置。
一些速度测试说zsh更快,但是我没有注意到任何区别。
zsh
甚至具有允许Dvorak键盘使用“输入一个字母”错误键入的设置。
进程替换和扩展的globbing是我最想念的两个功能。提示设置也很酷-在命令行上键入复杂的语句时,可以看到嵌套级别。自动加载使在每个shell中包含许多功能成为可能。
由于vi模式的支持,我是zsh的粉丝,但是我发现它的使用不是很广泛。我想我读过zsh喜欢从其他shell中获取流行的功能并将其组合(因此zsh中提供了bash特有的功能和csh特有的功能)。
有人还说我正在通过使用zsh来表达我的怪才,但我无法证实或否认这一谣言。
人气#bash 430用户。#zsh 123位用户。我相信zsh网站将zsh与其他shell进行了很好的比较。zsh具有更好的vi模式支持。
Bash在if和while中使用与在命令行上的/ bin / sh脚本中可以使用的语法相同的语法。
在zsh中,语法不同。如果在命令行上使用if或while语句,则有效地使用zsh时,您必须记住两者
if [[ $test = "test" ]]; then echo "success"; else echo "failure"; fi
在命令行和脚本上都使用了它,并且在两种情况下都按预期工作。因此,似乎您没有事实依据。