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