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

时间:2016-01-02 14:30:38

标签: linux unix unicode byte-order-mark

可执行文件开头的#!告诉Unix / Linux shell将文件视为脚本,此脚本的解释器路径紧跟#!

Unicode字节顺序标记在#!之前出现在此类脚本文件的开头是否合法?

我理解脚本将被传递给的特定解释器需要理解字节顺序标记并正确处理它。我的问题是#!部分是否仍被视为文件的开头?

当然,我可以出去测试某个特定操作系统上的特定shell的功能,但我对这是否合法的更一般性问题感兴趣。如果有人可以链接或指向一个非常棒的文档!

1 个答案:

答案 0 :(得分:1)

将评论转换为答案。

如果您在文件的开头放置BOM,则内核将无法识别#! shebang。此外,BOM中没有意义;如果文件是UTF-8,那么BOM是没有意义的,我知道没有内核可以作为Unicode表示使用UTF-16(或UTF-32),并且那些编码是BOM可能相关的地方。总而言之 - 不要在Unix上的文件开头放置BOM;它无济于事,可能会阻碍事情发展。

  

BOM将有利于最终运行脚本的解释器。

如果脚本文件中的数据确实是UTF-16(UTF-16LE或UTF-16BE),那么BOM可以在开头出现并且可以通知解释器脚本,但内核不会启动为你翻译;你有用:

interpreter script.name

而不是只输入

script.name

(你可能还必须处理脚本的路径位置)。只要你认识到这将会发生什么,那就没关系。如果您只想运行script.name,那么该文件必须以#!开头,这将排除BOM作为替代开始。