关于脚本文件的第一行 - Shebang

我们在编写脚本的时候,通常会在第一行添加如下的语句:

1
2
#! /bin/bash
...

这是一个 POSIX 惯例,它有一个名称 — Shebang

在 POSIX 类系统中,如果文件第一行包含 Shebang 标志,该行后面的内容会被 POSIX 系统的程序加载器识别为解释器指令,并调用该解释器。
同时,将该文件传递给解释器作为参数。
因为文件第一行以 #! 开头,所以解释器(大部分解释器将#开头的语句作为注释)会忽略该行。

起源

关于它的起源,一直没有官方的说法,估计是约定俗成的惯例了,权当了解下吧。

  • 很多脚本主要是 shell 脚本,所以取其前面的几个字母 「She」;
  • #!的读音为 Sharpbang

例外

有的解释器指令不会忽略 #,比如 cat,如下:

1
2
3
#! /bin/cat
Hello World!

cat 会将该文件的所有内容输出。

总结

这里列举一下 Shebang 的几点要求:

  • #! 必须连接在一起,它的术语是 Shebang,也称为 hashbang
  • #! 一句必须在文件的最开始,第一行
  • # 开头的语句一般情况下会被当成注释而忽略,所以Shebang 对文件的内容是没有影响的
  • #! 开头的一行会设置解释器运行环境