概念
Bash(GNU Bourne-Again Shell)是許多Linux發行版的默認Shell。事實上,還有許多傳統UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,Shell Script大緻都類同,當您學會一種Shell以後,其它的Shell會很快就上手,大多數的時候,一個Shell Script通常可以在很多種Shell上使用。
bash是大多數Linux系統以及Mac OS X默認的shell,它能運行于大多數類Unix風格的操作系統之上,甚至被移植到了Microsoft Windows上的Cygwin系統中,以實現Windows的POSIX虛拟接口。此外,它也被DJGPP項目移植到了MS-DOS上。
bash的命令語法是Bourne shell命令語法的超集。數量龐大的Bourne shell腳本大多不經修改即可以在bash中執行,隻用了Bourne特殊變量或使用了Bourne的内置命令的腳本才需要修改。 bash的命令語法很多來自Korn shell(ksh) 和 C shell (csh),例如命令行編輯,命令曆史,目錄棧,$RANDOM 和 $PPID變量,以及POSIX的命令置換語法: $(...)。作為一個交互式的shell,按下TAB鍵即可自動補全已部分輸入的程序名,文件名,變量名等等。
曆史
由于理查德·斯托曼對于之前一位開發者的進度不滿,布萊恩·福克斯從1988年1月10日開始開發Bash。斯托曼和自由軟件基金會希望到一個能夠運行已有的shell腳本的自由軟件。他們把這看作是建成一個基于BSD和GNU的完全自由的操作系統的戰略的重要部分。這是他們自己注資的幾個項目之一。福克斯作為自由軟件基金會的雇員承擔了這項工作。1989年6月8日,福克斯發布了Bash的beta版本,版本号為.99。在福克斯1992年中期到1994年中期的某個時候離開自由軟件基金會之前,他一直擔任Bash的主要維護者。之後,他的工作被傳遞給另一個早期貢獻者,切特·雷米(Chet Ramey)。n從那時起,在Linux用戶當中sh在很大度上成為了最流行的shell,并成為許多Linux發行版默認的交互式shell(不過Almquist shell可能是默認的腳本shell)。在蘋果公司的OSX操作系統上也是如此。Bash也被移植到 Microsoft Windows(通過Cygwin和MinGW)。通過DJGPP項目,Bash被移植到了DOS。通過許多終端模拟軟件,Bash被移植到Novell NetWare和Android。微軟在2016年的Build大會上宣布,Windows 10添加了一個Linux子系統,完全支持Bash和其他Ubuntu下的二進制程序。n2014年9月24日,Stephane Chazelas,一位工作于英國,緻力于Unix/Linux和網絡通信方面的專家,發現了Bash的一個安全漏洞。這個漏洞被命名為Shellshock,并被分配了編号 CVE-2014-6271、CVE-2014-6277、CVE-2014-7169。這個漏洞非常嚴重,因為使用Bash的CGI腳本會變得脆弱,使得攻擊者可以執行任意的代碼。這個漏洞與Bash通過環境變量把函數定義傳遞給shell子進程的方式有關。
外界評價
Linux之父Linus對BASH的描述
我下載了一個叫BorneShell的外殼程序。它是UNIX的初始外殼程序之一,可以從互聯網上免費下載,名字來源于一個難聽的雙關語。編寫該外殼程序的家夥名叫波恩(英文中的“忍受”或“出生”之意――譯注),所以這個程序就叫做“BorneAgainShell”(“再次忍受或再次降生外殼程序”――譯注),或一般被稱為BASH(bash的英文意為“重擊”――譯注)。
BASH的正确縮寫
BASH=GNUBourne-AgainShell,BASH是GNU組織開發和推廣的一個項目。
BASH的作者和産生
Bourneshell的作者是StevenBourne,它是UNIX最初使用的Shell并且在每種UNIX上都可以使用。
而BASH與Bourneshell完全向後兼容,是Bourneshell的擴展。
雙關語的經典之處
作者名叫StevenBourne,“bourne”與“born”的發音相近,而born有“出生”和“忍受”的含義。
Bourne-Again字面意思代表了它是“Bourneshell”l的一種擴展,而暗示“borne-again”、“born-again”則有“重生”和“再次忍受”的意思。(我想作者應該更喜歡“重生”)
它的簡寫“bash”的意思是“重擊”,暗示它的出現是一次強有力的重擊。
BASH還有魔獸争霸3中人族英雄山丘之王技能之一重擊的意思,也就是說bash是重擊的英文



















