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

KSH按~分割字符串赋值数组后长度始终为1问题求解

问题根因
  • 你的写法将命令执行结果赋值给了普通字符串变量而非数组,Var2本质是单个长字符串,因此用${#Var2[@]}取长度时永远返回1(KSH会把普通变量识别为长度为1的数组)
  • 即使输出内容包含换行符,直接赋值给普通变量也不会自动按分隔符切分为多个数组元素,需要配合KSH的数组赋值规则和字段分隔符(IFS)处理
  • 原变量末尾带额外的~分隔符,不处理的话拆分后会生成多余的空元素
正确实现方案

推荐使用临时修改IFS的方式实现,无需调用外部sed、echo命令,性能更高,也能兼容元素内部带空格的场景:

# 原变量定义
Var="Key1:Val1~Key2:Val2~"

# 第一步:删除变量末尾的~,避免生成空元素
Var=${Var%~}

# 第二步:临时切换IFS为~,拆分字符串到数组
old_IFS=$IFS
IFS='~'
Var2=( $Var )
IFS=$old_IFS

# 验证结果
ArrSize=${#Var2[@]}
echo $ArrSize # 输出结果为2,符合预期
echo ${Var2[0]} # 输出Key1:Val1
echo ${Var2[1]} # 输出Key2:Val2

如果你坚持要使用sed替换的写法,需要调整为数组赋值语法,兼容KSH88版本:

Var="Key1:Val1~Key2:Val2~"
Var=${Var%~}
set -A Var2 $(echo "$Var" | sed 's/~/\n/g')
ArrSize=${#Var2[@]} # 此时长度为2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:36:00