本文是關于zsh(不是oh-my-zsh)與bash的對比带欢,主要參考(翻譯)自Quora上的一個回答以及stackexchange上的一些討論僻他。標題不用vs是不想讓讀者產生二選一的想法眼刃。
Shell簡史
早期Unix上的shell是由Ken Thompson在貝爾實驗室完成的师郑,用于Unix 1-6版(Ken Thompson也是Unix和B語言的創(chuàng)造者之一)欣鳖,目前已經不再使用了采呐。
后來,John Mashey在Unix的PWB版本(一個專門面向程序開發(fā)者組織的版本)上對Ken Thompson的shell進行了改進凌净,增加了shell變量(環(huán)境變量的前身)悲龟,腳本執(zhí)行能力,中斷處理以及新的控制結構冰寻。
在Unix v7版中须教,Stephen R. Bourne完整的重寫了shell,也就是我們現在所說的sh斩芭,全稱Bourne shell轻腺。它的二進制文件為/bin/sh
羹奉,但是目前的*nix發(fā)行版大多將這個文件替換為了指向其它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的比較
- bash script更加接近posix標準,zsh則更
佳加(′▽`)“靈活” - bash基本上上手即用屈扎,zsh則需要繁雜的配置(但我們有神一樣的oh-my-zsh)
- 二者的prompte不同埃唯,zsh的prompte可定制性更高
- zsh的自動補全功能更加強大
- zsh的拼寫檢查功能更強
總結
從一個交互式終端的角度來講,zsh更為強大鹰晨,但是作為腳本解釋器墨叛,bash更加符合posix標準,因此模蜡,建議讀者日常使用zsh(配合oh-my-zsh)漠趁,但是使用bash做腳本解釋器。