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

Bash中如何将Unicode码位数组转换为字符串并存入变量

纯Bash实现Unicode码位数组转目标字符串

场景说明

现有存储Unicode码位的数组,需要将每个码位转换为对应字符,拼接后存入字符串变量。下方是对应文本Hello World!的示例码位数组,实际使用时支持最高16位的任意Unicode码值:

array=( 72 101 108 108 111 32 87 111 114 108 100 33 )

常见无效写法问题

之前尝试的拼接\U前缀加十进制码值、再通过printf %b解析的方案无法生效,核心原因是Bash的\UUnicode转义要求后跟8位十六进制数值,直接拼接十进制数不符合转义格式规则。
另外Bash内置的$'\Uxxx'、echo -e '\Uxxxxx'语法仅支持输出固定Unicode字符,无法直接适配动态变量场景:单引号会阻断变量展开,$'\U$i'、"$'\U$i'"这类写法都不会解析变量中存储的码值,无法得到预期结果。

纯Bash实现方案

直接使用Bash内置的printf能力即可完成转换,无需依赖任何外部命令,代码如下:

# 待转换的Unicode码位数组
array=( 72 101 108 108 111 32 87 111 114 108 100 33 )

# 转换结果直接存入result变量
printf -v result '\U%08x' "${array[@]}"

执行完成后,result变量中存储的就是拼接完成的目标字符串,运行echo "$result"即可输出Hello World!。

实现逻辑说明

  • printf -v <变量名>是Bash内置语法,会直接将格式化输出的结果存入指定变量,相比命令替换的写法执行效率更高
  • 格式串\U%08x会自动将每个传入的十进制码位转换为8位前导补零的十六进制值,完全匹配Bash对Unicode转义的参数要求,可覆盖所有16位Unicode码位场景
  • 该实现全程使用Bash内置命令,无外部工具依赖,兼容Bash 4.0及以上版本。

内容的提问来源于stack exchange,提问作者Lor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:36:27