我见过两个:
#!/path/...
#! /path/...
什么是对的?有关系吗?有历史吗?
我听说过古老版本的Unix要求没有空间。但后来我听说这只是一个谣言。有人知道吗?
编辑:我想不出更好地问这个问题。这是编程相关的,因为空间可以使程序以不同的方式运行,我所知道的。因此我在这里问过。
答案 0 :(得分:17)
我也有一个模糊的记忆,在一些旧的类Unix系统中不允许使用空格,但是一些研究并不支持这一点。
根据this Wikipedia article,1980年1月在版本8 Unix中引入了#!
语法.Dennis Ritchie最初宣布此功能的说法是:
系统已更改,以便在正在执行的文件开始时 与神奇的人物#! ,其余部分被理解为 是执行文件的解释器的名称。以前(和 事实上,贝壳做了很多工作;它自动 文本时,在具有可执行模式的文本文件上执行自身 文件名被输入为命令。把设施放入 系统具有以下好处。
[SNIP]
利用这个绝佳的机会,把
#! /bin/sh
在shell脚本第一行的左边缘。空白 之后!没关系使用完整的路径名(不进行搜索)。在 整个行限制为16个字符,但这个限制 将被提出。
可以想象,一些类似Unix的系统支持#!
语法,但在!
之后不允许空格,但鉴于第一个实现明确允许空白,这似乎不太可能。< / p>
leonbloy的回答提供了更多背景信息。
更新:
Perl解释器本身识别以#!
开头的行,即使在内核无法识别的系统上也是如此。有关详细信息,请运行perldoc perlrun
或查看this web page。
#!始终检查线路是否为线路 解析。因此,如果您在一台只允许一个参数的机器上 与#!线,或者更糟,甚至不认识#!行,你 无论Perl如何,仍然可以获得一致的切换行为 调用,即使-x用于查找程序的开头。
Perl还允许#!
之后的空格。
(就个人而言,我更喜欢在没有空格的情况下编写#!
行,但它会以任何一种方式工作。)
答案 1 :(得分:9)
它似乎通常都是双向的。 See here。我会说无空间版本今天更常见,对我来说,更具吸引力。
BTW,这与Perl没有特别关系(但它肯定与编程有关)。