Zsh & Bash

本文是关于zsh(不是oh-my-zsh)与bash的对比,主要参考(翻译)自Quora上的一个回答以及stackexchange上的一些讨论。标题不用vs是不想让读者产生二选一的想法。

Shell简史

早期Unix上的shell是由Ken Thompson在贝尔实验室完成的,用于Unix 1-6版(Ken Thompson也是Unix和B语言的创造者之一),目前已经不再使用了。

后来,John Mashey在Unix的PWB版本(一个专门面向程序开发者组织的版本)上对Ken Thompson的shell进行了改进,增加了shell变量(环境变量的前身),脚本执行能力,中断处理以及新的控制结构。

在Unix v7版中,Stephen R. Bourne完整的重写了shell,也就是我们现在所说的sh,全称Bourne shell。它的二进制文件为/bin/sh,但是目前的*nix发行版大多将这个文件替换为了指向其它shell的硬链接或者软链接,或者干脆是bash的posix选项重编译版,比如我的mac上是,sh实际上是bash:

ll /bin/sh /bin/bash
-r-xr-xr-x  1 root  wheel   612K  9 14 08:57 /bin/bash
-r-xr-xr-x  1 root  wheel   616K  9 14 08:57 /bin/sh

/bin/sh
sh-3.2$ help
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
...

有人在这里讨论了mac上这个蛋疼的问题。

而目前*nix系统上的默认shell,bash,Bourne-Again shell,是GNU对sh的重写,bash在功能上是sh的超集。

其它的shell,像csh、zsh则各有所长,但是对posix标准的支持没有bash那么严格,因此在大多数的shell脚本教程中,仍然是推荐使用#!/bin/bash做解释器,
这也是为什么目前很多*nix系统使用bash作为默认shell的原因之一。

Zsh与Bash的比较

  1. bash script更加接近posix标准,zsh则更加(´▽`)“灵活”
  2. bash基本上上手即用,zsh则需要繁杂的配置(但我们有神一样的oh-my-zsh)
  3. 二者的prompte不同,zsh的prompte可定制性更高
  4. zsh的自动补全功能更加强大
  5. zsh的拼写检查功能更强

总结

从一个交互式终端的角度来讲,zsh更为强大,但是作为脚本解释器,bash更加符合posix标准,因此,建议读者日常使用zsh(配合oh-my-zsh),但是使用bash做脚本解释器。

你可能感兴趣的:(Zsh & Bash)