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

如何在Bash变量中规范存储JSON并正常输出?

解决Bash变量存储JSON时输出不完整的问题

这个问题的核心是Bash的单词拆分和引号解析规则在搞鬼,咱们一步步来解决:

问题原因

你之前的赋值语句虽然转义了双引号,但在执行echo $testConfig时没有用引号包裹变量。Bash会把变量里的空格作为参数分隔符,将内容拆分成多个部分,再加上对引号的解析,导致只有第一个被拆分的片段,{被输出。

解决方案

这里有两种实用的方法,既能让JSON保持整洁格式,又能完整存储和输出:

方法1:用单引号直接包裹JSON(适合简短内容)

单引号在Bash里会完全保留内部内容,不需要转义双引号,非常省心:

testConfig=',{ "Classification": "mapred-site", "Properties": { "mapreduce.map.java.opts": "-Xmx2270m", "mapreduce.map.memory.mb": "9712" } }'

输出时一定要用双引号包裹变量,避免Bash拆分内容:

echo "$testConfig"

方法2:用Here Document(HEREDOC)存储格式化的JSON(适合多行内容)

如果想让JSON保持换行缩进的整洁格式,HEREDOC是最佳选择,它允许你直接按格式编写内容:

read -r -d '' testConfig << 'EOF'
,{
  "Classification": "mapred-site",
  "Properties": {
    "mapreduce.map.java.opts": "-Xmx2270m",
    "mapreduce.map.memory.mb": "9712"
  }
}
EOF
  • << 'EOF'里的单引号表示HEREDOC内的内容完全原样保留,不会被Bash解析(比如变量替换)
  • read -r -d ''用来读取整个HEREDOC内容,包括换行和特殊字符
    同样,输出时用双引号包裹变量:
echo "$testConfig"

关键提醒

永远记住:在Bash中引用变量时,只要变量内容包含空格、引号或特殊字符,必须用双引号包裹变量,否则Bash会对内容进行不必要的拆分和解析,导致结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:27