是否允许在UNIX脚本文件的开头使用Unicode字节顺序标记



可执行文件开头的#!告诉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表作为替代开头的可能性。

最新更新