如何在Bash脚本中将附件参数拆分存入多个目标数组?
处理Bash脚本中的附件参数并拆分到数组
没问题,我来帮你搞定这个需求!你的思路完全正确——先按分号拆分每个独立的附件条目,再对每个条目按逗号拆分提取字段,最后分别存入对应的数组。下面是具体的Bash实现方案,我会一步步解释:
步骤1:初始化目标数组
首先我们需要创建三个空数组,用来存储拆分后的附件信息:
# 初始化三个空数组,分别存储文件名、路径、类型 attachmentFilename=() attachmentPath=() attachmentType=()
步骤2:拆分所有附件条目
假设你的inputAttachments变量已经存储了所有--attachment参数的内容(比如类似"hello,/dir/hello.pdf,pdf;image,/dir/image.png,png"这样的字符串),我们先按分号;拆分出每个单独的附件条目:
# 设置分隔符为分号,将所有附件条目存入临时数组all_entries IFS=';' read -ra all_entries <<< "$inputAttachments"
这里的IFS=';'指定了拆分的分隔符,read -ra会把拆分后的内容自动存入数组all_entries,-r参数用来避免反斜杠被转义,-a表示将结果存入数组。
步骤3:遍历条目并拆分字段
接下来遍历每个附件条目,按逗号,拆分出文件名、路径和类型,然后分别加入对应的数组:
# 遍历每个附件条目 for entry in "${all_entries[@]}"; do # 按逗号拆分当前条目,提取三个字段 IFS=',' read -r filename path type <<< "$entry" # 将字段追加到对应的数组中 attachmentFilename+=("$filename") attachmentPath+=("$path") attachmentType+=("$type") done
可选:验证结果
如果你想确认数组是否正确填充,可以添加一段验证代码:
# 打印三个数组的内容,验证拆分结果 echo "=== 拆分结果验证 ===" echo "attachmentFilename数组:" printf ' - %s\n' "${attachmentFilename[@]}" echo "attachmentPath数组:" printf ' - %s\n' "${attachmentPath[@]}" echo "attachmentType数组:" printf ' - %s\n' "${attachmentType[@]}"
特殊情况处理:如果inputAttachments是数组
如果你的inputAttachments是由多个--attachment参数组成的数组(比如用getopts收集参数时得到的数组),可以先将数组合并为一个用分号分隔的字符串,再按上面的步骤处理:
# 将inputAttachments数组合并为单字符串,用分号分隔 inputAttachments_combined=$(IFS=';' echo "${inputAttachments[*]}") # 后续步骤和之前一致 IFS=';' read -ra all_entries <<< "$inputAttachments_combined"
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

