Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别

1、意思html

#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。shell

其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,咱们能够用各类各样的解释器来写对应的脚本。bash

好比说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等。测试

#!/bin/bash同理。ui

2、区别操作系统

GNU/Linux操做系统中的/bin/sh本是bash (Bourne-Again Shell) 的符号连接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并改名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以得到更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。.net

Ubuntu继承了Debian,因此从Ubuntu 6.10开始默认是Dash Shell。unix

应该说,/bin/sh/bin/bash虽然大致上没什么区别,但仍存在不一样的标准。标记为#!/bin/sh的脚本不该使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash能够)。Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。可是后来通过shell脚本测试存在运行问题。由于原先在bash shell下能够运行的shell script (shell 脚本),在/bin/sh下仍是会出现一些意想不到的问题,不是100%的兼用。htm

上面能够这样理解,使用man sh命令和man bash命令去观察,能够发现sh自己就是dash,也就更好的说明集成Debian系统以后的更改。blog

以上参考:http://blog.chinaunix.net/uid-27037833-id-3431985.html

相关文章
相关标签/搜索