我对出现在每个 python 文件、大多数 bash 文件以及其他几个文件顶部的短语“#!”有疑问。
我已经在 Google 和本网站上搜索过该术语。Google 只是让我参考 bash 文档,而 Super User 则没有给我任何搜索结果。
因此,我的问题是:
除了显示要使用的主要解释器的顶行之外,在解释的可执行文件的任何部分中,短语“#!”还有什么用处吗?
如果是这样,它可以用来在同一个 shell 中切换解释器吗,或者它是否用于其他用途?
还有其他类型的命令可以像这个一样发送到解释 shell 吗?
答案1
众所周知的“hashbang”仅在出现在文件开头时才有用。当从以这两个字节开头的 *nix shell 执行文件时,将调用以下路径名来解释文件的其余部分。这允许将解释的脚本与编译的二进制可执行文件视为同一级别。
shell 将整个文件传递给解释器,因此以 # 开头的另一个原因是它会让第一行被解释器视为注释。
对您其他问题的回答都是否定的——您不能在文件中途切换解释器(除非您向第一个执行此操作的解释器发送不同的指令),并且没有其他嵌入式“命令”可以在尝试执行文本文件时被 shell 解释。
答案2
它被称为 shebang。解释器会忽略它,因为该行以“#”开头,这意味着它是注释,但对于系统来说,它会告诉执行时如何处理该代码。“#!”后面的路径是解释器的路径,如果您运行该代码,它将使用您在 shebang 中提供的解释器打开文件。