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

如何在Bash中用包含多行内容的字符串填充数组?

处理带多行内容的字符串变量转数组问题

问题场景

我有一个包含多个字符串的变量,其中部分字符串带有多行内容:

var="foo 'bar baz' 'lorem
ipsum'"

需要把这些带引号或不带引号的字符串,分别作为数组的独立元素。

最初尝试与报错

原本打算用xargs -n1拆分字符串并导入数组:

mapfile -t arr < <(xargs -n1 <<< "$(echo "$var")" )

但执行时触发如下错误:

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option

临时解决方法

我想到将换行符替换为回车符,处理完成后再恢复换行的办法,这个方法能正常工作:

# 填充数组(临时保留换行符的折中方案)
mapfile -t arr < <(xargs -n1 <<< "$(echo "$var" | tr '\n' '\r')" )

# 恢复原字符串中的换行符
for (( i=0; i<${#arr[@]}; i++ )); do
  arr[i]=$(echo "${arr[$i]}" | tr '\r' '\n')
done

执行验证输出:

# for (( i=0; i<${#arr[@]}; i++ )); do echo "index: $i, value: ${arr[$i]}"; done
index: 0, value: foo
index: 1, value: bar baz
index: 2, value: lorem
ipsum

但这个方法有明显局限性:仅当输入变量本身不包含回车符时有效。

疑问与优化需求

我希望让xargs以空字节分隔输出结果,再配合mapfile的-d ''选项来导入数组,但xargs似乎没有类似print0的输出选项(直接用tr '\n' '\0'会直接修改多行字符串本身的换行符,破坏原内容),该如何实现更可靠的拆分?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:55