为什么 linux 配置文件中的注释行有时会起作用?

use*_*767 6 scripts

通过注释行,我的意思是:

#!/usr/bin/perl -w
Run Code Online (Sandbox Code Playgroud)

以及/boot/grub/menu.lst文件中的注释,如此对超级用户的回答中所述。

它已经有一个注释,即该行以 a 开头#,但仍在被解释。为什么呢?

job*_*bin 19

任何以 a 开头的行在#许多语言中都是注释,会被解释器(perl等)忽略。

但是,如果Linux 中脚本的第一行#!( shebang被称为)开头,则它不是注释,而是程序加载器的指令,以实际运行之后指定的程序#!并将文件名传递给它最后一个论点。

例如,如果第一行是

#!/usr/bin/perl -w
Run Code Online (Sandbox Code Playgroud)

这意味着 shell 将实际调用/usr/bin/perl -w /path/to/the/script并且您不需要指定一个程序来运行此脚本,您可以使用

/path/to/the/script
Run Code Online (Sandbox Code Playgroud)

如果您有运行它的权限并且它位于支持执行的文件系统上并且该文件有执行权限。

然而,对于解释器来说,这一行始终只是一个注释,所以如果脚本被执行为:

perl /path/to/the/script
Run Code Online (Sandbox Code Playgroud)

那么该行没有效果。(感谢Ruslan指出这一点)。

请注意,这#并不总是表示评论。例如,#在 C 中以 a 开头的语句是预处理器指令而不是注释。

在您的情况下,该行是一条注释,在执行时将被忽略。

更新:

您正在谈论的文件是 a menu.lst,其中注释是以##和 not开头的行#(来源)