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

Bash中如何拆分含空格的|分隔字符串并保留空格?

问题原因&解决办法

你这脚本的问题出在俩地方:

  1. 错误把awk输出存成数组:a=(awk...)这种写法,Bash会把awk的输出按空格、换行这些空白字符拆成数组元素。你awk输出的是how are you|fine|and you?,直接就被拆成了how、are、you|fine|and、you?这四个碎块,根本不是你要的完整分隔字符串。
  2. 用字符串替换拆分的方式不对:就算a是正确的完整字符串,b=(${a//|/ })这种写法,Bash在展开的时候还是会按空白字符拆分,带空格的内容直接就被拆碎了。

正确写法

第一步:先把awk输出存成普通字符串

别用数组赋值,直接存成普通变量:

a=$(awk 'BEGIN{
        x="how are you"; y="fine"; z="and you?";
        printf("%s|%s|%s",x,y,z)}')

这时候a的内容就是完整的how are you|fine|and you?。

第二步:用IFS+read拆分(保留空格)

要按|拆分带空格的字符串,最靠谱的方式是临时设置分隔符,再用read读进数组:

IFS='|' read -ra b <<< "$a"
  • IFS='|':临时把字段分隔符改成|,只对这次read命令生效
  • -r:避免反斜杠被转义,保证内容原样读取
  • -a b:把拆分后的内容存进数组b
  • <<< "$a":把字符串a作为read的输入

完整脚本

a=$(awk 'BEGIN{
        x="how are you"; y="fine"; z="and you?";
        printf("%s|%s|%s",x,y,z)}')

IFS='|' read -ra b <<< "$a"

# 测试输出
echo "${b[0]}"
echo "${b[1]}"
echo "${b[2]}"

执行后就能得到你想要的结果:

how are you
fine
and you?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:12:31