可执行文件开头的#!
告诉Unix/Linux shell将该文件视为脚本,该脚本的解释器路径紧随#!
之后。
Unicode字节顺序标记出现在#!
之前的脚本文件的开头是否合法?
我知道,脚本将传递给的特定解释器需要理解字节顺序标记并正确处理它。我的问题是#!
部分是否仍然被认为在文件的开头?
当然,我可以出去测试特定操作系统上的特定shell的功能,但我感兴趣的是一个更普遍的问题,即这是否合法。如果有人能链接或指向一个文档,那将是非常棒的!
将注释转换为答案
如果将BOM放在文件的开头,内核将无法识别#!
shebang。此外,BOM表中没有任何意义;如果文件是UTF-8,那么BOM就没有意义了,而且据我所知,没有一个内核可以将UTF-16(或UTF-32)作为Unicode表示,而这些编码是BOM可能相关的地方。总之,不要在Unix上的文件开头放BOM;这不会有帮助,而且可能会阻碍事情的发展。
BOM将有利于最终运行脚本的解释器。
如果脚本文件中的数据真的是UTF-16(UTF-16LE或UTF-16BE),那么BOM可以在开始时出现,并可以通知解释器脚本,但内核不会为您启动解释器;你会使用:
interpreter script.name
而不仅仅是键入
script.name
(您可能还需要处理脚本的路径位置)。只要你认识到这就是会发生的事情,那没关系。如果只想运行script.name
,那么文件必须以#!
开头,这就排除了BOM表作为替代开头的可能性。