脚本中的 Shebang 序列

Lin*_*00b 0 shell shebang

让我们假设shebang 序列包含在一个单独的文件中编写的脚本中;例如,我创建了一个example.sh脚本文件。

如果我在文件中添加shebang序列:

 #!/bin/sh
Run Code Online (Sandbox Code Playgroud)

我如何确定上面的命令未被识别为注释(在 Linux Bash 脚本中,#通常被视为注释的开始。

seu*_*mac 5

如果脚本是可执行的并且“#!”,shebang 才是真正的shebang 是文件的前两个字符。

操作系统实际上是在文件中检查前两个字节,并看到它们是(十六进制)“23”和“21”,它们是“#”和“!”的 ASCII 代码。

如果这些出现在文件的后面,或者如果您没有直接执行文件,则该行确实被视为注释,因为它以 # 开头。

事实上,如果该行是:

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

然后操作系统找到shebang并因此运行:

/bin/sh [filename]
Run Code Online (Sandbox Code Playgroud)

/bin/sh 运行脚本时忽略shebang行注释。

当涉及到一些不用#作注释的其他语言时,通常会向解释器传递一个特殊标志,因此它知道忽略第一行(例如#!/usr/local/bin/tcc -run)。