You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Linux Shell脚本能否使用带BOM的UTF-16格式的技术咨询

关于Linux Shell脚本能否使用带BOM的UTF-16格式的技术咨询

嗨,我来帮你梳理这个问题~

首先直接给结论:大多数Linux shell(比如你用的bash)默认是不支持直接执行UTF-16编码(不管带不带BOM)的脚本的,这也是你遇到-bash: ./test-unicode.sh: cannot execute binary file错误的核心原因——shell把UTF-16的双字节流当成了二进制数据,根本识别不出这是可解析的脚本文本。

为啥会这样?简单说,shell脚本的执行逻辑是靠开头的shebang(比如#!/bin/bash)来触发对应的解释器,但bash这类解释器默认只认UTF-8或者ASCII这类单字节编码。UTF-16里,#!这两个字符会变成四个字节(比如UTF-16LE下是0x23 0x00 0x21 0x00),解释器完全看不懂这是脚本的起始标记,自然就把整个文件当成二进制处理了。

那你想在注释里加入特殊Unicode字符的需求怎么满足?其实不用纠结UTF-16,给你两个实用方案:

  • 首选方案:把脚本保存为UTF-8编码(推荐不带BOM,因为少数shell对UTF-8 BOM会有兼容性问题)。UTF-8完全支持所有Unicode字符,你想加的那些原本用UTF-16表示的字符,转成UTF-8后一样能正常显示,而且shell可以毫无障碍地解析脚本,完美解决需求。
  • 备选方案(不推荐日常用):如果非要保留UTF-16编码,那得先转码再执行,比如用iconv工具转成UTF-8后交给bash处理:
    iconv -f UTF-16LE -t UTF-8 ./test-unicode.sh | bash
    
    注意这里要指定正确的UTF-16字节序(LE小端或BE大端),不然转码会乱码。

总结一下:别用UTF-16写shell脚本,换成UTF-8是最省心的选择,既能满足注释里加特殊字符的需求,又不会触发执行错误。

备注:内容来源于stack exchange,提问作者alancc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:55:34