bash vs. zsh

听说 zsh 很多年,也听说了各种 zsh 强于 bash 的例子,似乎公司 RHEL 5 默认的 shell 也是 zsh 了,逼得我等老土也要开始向 zsh 迁徙了(zsh 据说是 ksh 的增强,诚如 bash 是 bsh 的增强)。首先还是记录一些看到的快捷键。可以在 bash 里面通过 bind 或者 zsh 里面通过 bindkey 选择对应的 key binding。俺是 emacs 粉丝,用前者比较多

function emacs key binding vi keybinding
行首 C-a C-a
行尾 C-e C-e
向行尾走一个单词 M-f ESC f
向行首走一个单词 M-b ESC b
删除光标后输入 C-k C-k
删除光标前输入 C-u C-x C-?
删除光标后一个单词 M-d ESC d
删除光标前一个单词 C-w ESC C-h
向后搜索命令历史 C-r C-r
向前搜索命令历史 C-s C-s
换大写 M-u
换小写 M-l
换首字母大写 M-c ESC c
粘贴 C-y C-y

大概分为两类:前面的是移动类型的,后面的是编辑类型的,其中差异并不大,基本都是按照 emacs/vi 的按键 binding 来设置的。不过通过配置文件我们可以更改两者的 key binding,bash 可以 bind -P 列出当前的 binding,zsh 可直接 bindkey 列出当前的 key binding。

有了这些快捷键我想可以大大的加快大家 CLI 的速度。那么 zsh 到底比 bash 有些什么强的地方呢?

  • 按照某 blog 的说法,那就是像 bash!这倒是不错,另外他说 zsh 能自动纠错,我想估计是需要额外的配置,其实我的 bash 也能做到的 -,-b debian 下有个 command-not-found 的 package 里面会在 /etc/bash_command_not_found 里面加一些东西搞定,相反倒是 zsh 需要额外的处理
  • 补全智能性,似乎 zsh 做得就是更花哨一点?据说 kill 等命令显示的比较人性化,bash 其实也能做,就是做的 completion 比较简单,补全 option 更是如此
  • 据说做字符串匹配不用 x$var = xyes 这种 trick 了,不过觉得这个还是说不上好处,因为 zsh 没有普及也就是说可能不是 portable 的,很多 legacy 的 code 还依赖这种 trick 继续发挥功能

看到这里,我想不管是哪个 shell 你都可以用,只是喜欢花哨点的玩玩 zsh,简朴一点的玩玩 bash 就行了,zsh 很多新功能其实 bash 也能做就是可能不被要求苛刻的童鞋喜欢罢了。

—————–
And I came this day unto the well, and said, O LORD God of my master Abraham, if now thou do prosper my way which I go:

Advertisements
bash vs. zsh

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s