我见过两个:
#!/path/... #! /path/...
什么是对的? 有关系吗? 有历史吗?
我听说Unix的一个古老版本要求没有空间。 但后来我听说这只是一个传闻。 有谁知道确定?
编辑:我想不出有什么更好的问这个。 这是编程相关的,因为空间可以使程序以不同的方式运行,就我所知。 于是我在这里问了。
我也有一个模糊的记忆,在一些类似Unix的系统中,空白是不允许的,但是有一些研究不支持。
根据这篇维基百科文章 , #!
在1980年1月的版本8 Unix中引入了语法。丹尼斯·里奇(Dennis Ritchie)最初公布的这个特性说:
系统已被更改,以便如果正在执行的文件以魔法字符#!开始 ,该行的其余部分被理解为执行文件的解释器的名称。 以前(事实上仍然是)贝壳做了很多工作。 当文本文件的名称被输入为一个命令时,它会自动在一个带有可执行模式的文本文件上执行。 将该设施放入系统可带来以下好处。
[SNIP]
为了利用这个奇妙的机会,把
#! /bin/sh
在shell脚本的第一行的左边缘。 后空白! 好的。 使用完整的路径名(没有搜索完成)。 目前全线限制在16个字符以内,但这个限制会提高。
可以想象,一些后来的类Unix系统支持#!
语法,但不允许后空白!
,但考虑到第一个实施明确允许空白,这似乎不太可能。
leonbloy的答案提供了更多的上下文。
更新:
Perl解释器本身识别以#!
开头的行 ,即使在内核无法识别的系统上也是如此。 运行perldoc perlrun
或查看此网页的详细信息。
#! 在解析行时总是检查开关行。 因此,如果你在一台只允许一个参数的机器上! 甚至更糟,甚至没有认识到#! 行,即使使用-x来查找程序的开始,无论Perl如何被调用,仍然可以获得一致的切换行为。
Perl也允许在#!
之后使用空格 。
(就我个人而言,我更喜欢在没有空白的情况下编写#!
行,但是它可以工作。)
这似乎通常都是双向的。 看到这里 。 我想说,无空间的版本在今天更为普遍,对我来说更具吸引力。
顺便说一句,这与Perl没有特别的关系(但它的确与编程有关)。