#! 是个指示路径的表示符,/bin/bash和/bin/sh指定了脚本解析器的程序路径
简单地说,bash是sh的完整版,bash完全兼容sh命令,反之不行
执行man bash、man sh得到官方解释如下:
bash 是一个与 sh 兼容的命令解释程序,可以执行从标准输入或者文件中读取的命令。
我发现并且bash和sh的解释是完全一样的, 看来从手册上得不到解释。
通过查阅资料得知bash和sh的区别:
SH:
sh就是Bourne shell
这个是UNIX标准的默认shell,对它评价是concise简洁 compact紧凑 fast高效,由AT&T编写,属于系统管理shell
BASH:
bash是 GNU Bourne-Again SHell (GNU 命令解释程序 “Bourne二世”)
是linux标准的默认shell ,它基于Bourne shell,吸收了C shell和Korn shell的一些特性。bash是Bourne shell的超集,bash完全兼容Bourne shell,也就是说用Bourne shell的脚本不加修改可以在bash中执行,反过来却不行,bash的脚本在sh上运行容易报语法错误。
为什么会出现sh:
鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。
Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度,但是后来经过shell脚本测试存在运行问题。因为原先在bash shell下可以运行的shell script (shell 脚本),在/bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。
其他:
除了bash和bin,还有/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,/bin/echo等
shell:
shell即shell script, 是一种程序设计语言,也是一种命令语言
bash是sh的超集