让我们假设shebang 序列包含在一个单独的文件中编写的脚本中;例如,我创建了一个example.sh脚本文件。
如果我在文件中添加shebang序列:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
我如何确定上面的命令未被识别为注释(在 Linux Bash 脚本中,#通常被视为注释的开始。
如果脚本是可执行的并且“#!”,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)。