1. #!的名字为什么叫Sha-Bang?
Sha-Bang是Sharp和Bang的组合词。Sharp for #, Bang for ! 类似的情况是,C#通常被称为C Sharp.
2. Sha-Bang(#!)是不是注释?
不是注释。Sha-Bang(#!)所在行的作用是告知该脚本使用的是哪种命令解释器,并不是可有可无的。
虽然很多情况下省略了Sha-Bang(#!)仍然能够运行脚本,这是由于系统在这种情况下是默认使用了当前命令行解释器的.
“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
3. Sha-Bang(#!)的编写有什么规范?
Sha-Bang(#!)应该位于脚本的第一行,并且顶格填写,否则都是错的,前面不能有任何命令和注释。
若Sha-Bang之前的内容都是注释,也是错误的,且这种错误很常见,不易发现。
因为此时Sha-Bang(#!)所在行实际上是不起效的,系统使用了默认的命令行解释器。
4. Sha-Bang(#!)在同一个脚本中可以出现几次?
只有第一行的Sha-Bang(#!)会生效,其余的会视为注释
5. 为什么推荐这种写法:#!/bin/env perl?
因为这是有利于移植脚本到其它平台的写法,解释器的默认安装路径在各个操作系统是不太一样的。有的是/bin/,有的是/usr/bin/,甚至有可能是用户自定义的路径,使用env就基本上能够通用了。虽然env也有可能在/bin/或者/usr/bin/中,但通常的情况是在这两个路径下都有env,或者其中一个是另一个的符号链接。