为什么“she-bang”以“#!”开头?

为什么“she-bang”以“#!”开头?

为什么“she-bang”以#!,开头#!/bin/bash?我一直都承认这是怎么做的,但这背后有什么原因吗?

#为什么从;开始这不是通常的评论吗?或者说这是应该评论的重点吗?

答案1

通常舍邦仅指#!!通常称为“bang”,看起来“she”是“SHArp”或“haSH”的损坏#)——整行称为舍邦线

它确实有意以注释字符开头,以便向后兼容那些不知道如何处理它的事物;大概!只是为了将其与启动文件的随机注释区分开来,因此以 开头的文件# this is my script!不会尝试运行this is my script!解释器

答案2

要理解这一点,您必须意识到脚本的第一行实际上是被读取的两次,通过 2 个不同的程序。第一次,内核打开文件并#!在第一行查找该字符序列 ( )。如果找到它,它将运行那里指示的 shell 程序,并将文件名作为参数传递。 (例如,如果文件/home/me/foo以 开头#!/bin/sh,则内核将运行/bin/sh /home/me/foo)。

接下来,shell(bin/sh或指定的任何解释程序)读取该文件。 shell 对 shebang 行一无所知,但它仍然会读取第一行,因为它就像文件中的任何其他行一样......它会读取所有行。您不希望外壳程序崩溃或以任何方式改变其行为......这样做的方法是让它将 is 视为注释并忽略它。因此,内核指令开头的最佳字符是注释字符。

答案3

它需要是一个注释,因为只有这样它才可以运行像“interpretername scriptname”这样的脚本。我不知道“!”的由来。

相关内容