Q. #!的名字为何叫Sha-Bang?操作系统
A. Sha-Bang是Sharp和Bang的组合词。Sharp for #, Bang for ! 相似的状况是,C#一般被称为C Sharp命令行
Q. Sha-Bang(#!)是否是注释?变量
A. 不是注释。Sha-Bang(#!)所在行的做用是告知该脚本使用的是哪一种命令解释器,并非无关紧要的。虽然不少状况下省略了Sha-Bang(#!)仍然可以运行脚本,这是因为系统在这种状况下是默认使用了当前命令行解释器的perl
Q. Sha-Bang(#!)的编写有什么规范?脚本
A. Sha-Bang(#!)应该位于脚本的第一行,而且顶格填写,不然都是错的,即便Sha-Bang以前的内容都是注释,这种错误是常见的,并且不易发现的,由于此时Sha-Bang(#!)所在行其实是不起效的,系统使用了默认的命令行解释器异常
Q. Sha-Bang(#!)在同一个脚本中能够出现几回?注释
A. 只有第一行的Sha-Bang(#!)会生效,其他的会视为注释环境变量
Q. 为何推荐这种写法:#!/bin/env perl?错误
A. 由于这是有利于移植脚本到其它平台的写法,解释器的默认安装路径在各个操做系统是不太同样的,有的是/bin/,有的是/usr/bin/,甚至有多是用户自定义的路径,使用env就基本上可以通用了。虽然env也有可能在/bin/或者/usr/bin/中,但一般的状况是在这两个路径下都有env,或者其中一个是另外一个的符号连接系统
最后提醒一下,有时候设定的cronjob异常,可是命令行可以执行成功,请先检查一下Sha-Bang(#!)是否合法,而后检查是否缺乏了必须的环境变量,命令行可以执行成功多是利用了默认的命令行解释器和环境变量。