概念
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是重击的英文



















