我见过两个:
#!/path/...
#! /path/...
Run Code Online (Sandbox Code Playgroud)
什么是对的?有关系吗?有历史吗?
我听说Unix的古老版本要求没有空间.但后来我听说这只是一个谣言.有人知道吗?
编辑:我想不出更好地问这个问题.这是编程相关的,因为空间可以使程序以不同的方式运行,我所知道的.我在这里问了一下.
Kei*_*son 18
我也有一个模糊的记忆,在一些旧的类Unix系统中不允许使用空格,但是一些研究并不支持这一点.
根据维基百科的这篇文章,该#!
语法于1980年1月在Version 8 Unix中引入.Dennis Ritchie最初宣布此功能的原因是:
系统已更改,以便正在执行的文件以魔术字符#开头!,该行的其余部分被理解为执行文件的解释器的名称.以前(实际上仍然),shell完成了大部分工作; 当文本文件的名称作为命令输入时,它会自动在具有可执行模式的文本文件上执行.将设施放入系统可带来以下好处.
[SNIP]
为了利用这个绝佳的机会,放
Run Code Online (Sandbox Code Playgroud)#! /bin/sh
在shell脚本第一行的左边缘.空白之后!没关系 使用完整的路径名(不进行搜索).目前整行限制为16个字符,但此限制将被提高.
可以想象,一些后来类似Unix的系统支持#!
语法,但之后不允许空白!
,但鉴于第一个实现明确允许空白,这似乎不太可能.
leonbloy的答案提供了更多背景信息.
更新:
Perl解释器本身可以识别以行为开头的行#!
,即使在内核无法识别的系统上也是如此.运行!
或查看此网页以获取详细信息.
#!在解析行时始终检查行的开关.因此,如果你在一台机器上只允许一个带#的参数!线,或者更糟,甚至不认识#!无论如何调用Perl,即使使用-x查找程序的开头,您仍然可以获得一致的切换行为.
Perl也允许空格后的空格#!
.
(就个人而言,我更喜欢写perldoc perlrun
没有空格的行,但它会以任何一种方式工作.)