如何在Shell脚本中将字符串转换为单个字符元素的数组?
在Shell脚本中将字符串拆分为单个字符的数组
Bash 4.0+ 版本(推荐)
用readarray配合fold命令可以快速实现,fold -w1会把字符串按单个字符拆分,每行输出一个字符,再用readarray读入数组:
# 定义目标字符串 str="apple" # 将字符串拆分后存入数组 readarray -t array < <(fold -w1 <<< "$str") # 按需求格式验证输出 for idx in "${!array[@]}"; do echo "array[$idx]=${array[$idx]}" done
兼容旧版Bash(无readarray时)
通过循环逐个截取字符串的单个字符,存入数组:
str="apple" array=() # 遍历字符串的每个索引位置 for ((i=0; i<${#str}; i++)); do # 截取从i开始的1个字符,加入数组 array+=("${str:i:1}") done # 按需求格式验证输出 for idx in "${!array[@]}"; do echo "array[$idx]=${array[$idx]}" done
Zsh 版本
Zsh有更简洁的语法,直接用参数展开就能拆分:
str="apple" # 按空字符拆分字符串为数组 array=(${(s::)str}) # 按需求格式验证输出 for idx in "${!array[@]}"; do echo "array[$idx]=${array[$idx]}" done
你之前用IFS没效果是正常的——IFS是用来指定分隔符拆分字符串的,你的目标字符串里没有预设的分隔符(空格、逗号这类),所以没法靠它拆分单个字符,得用上面这些针对单字符拆分的方法。
内容的提问来源于stack exchange,提问作者lolndrug
相关产品推荐
相关产品推荐

