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

Bash脚本中含单双引号的字符串如何换行构造JSON参数

方案1:使用HereDoc拼接字符串(兼容POSIX sh,无需额外依赖)

该方案不需要安装额外工具,纯原生shell实现,结构清晰易维护,你可以直接按格式换行调整可读性:

#!/bin/sh
# 每行对应一个参数,直观易修改
EVENT_BODY=$(cat <<EOF
{
  "param1": "$1",
  "param2": "$2",
  "param3": "$3",
  "param4": "$4",
  "param5": "$5",
  "param6": "$6",
  "param7": "$7",
  "param8": "$8",
  "param9": "$9",
  "param10": "${10}",
  "param11": "${11}"
}
EOF
)

# 如果需要压缩成单行JSON,可额外加以下行去除换行和多余空格
# EVENT_BODY=$(echo "$EVENT_BODY" | tr -d '\n' | tr -s ' ')

echo "$EVENT_BODY"
exec "${12}" -e "${EVENT_BODY}"
方案2:使用jq生成JSON(更安全,自动处理转义)

如果你的基础镜像可以预装jq,更推荐这个方案,它会自动处理参数中的双引号、换行、反斜杠等特殊字符,不会生成非法JSON,可读性也更高:

#!/bin/sh
EVENT_BODY=$(jq -n \
  --arg p1 "$1" \
  --arg p2 "$2" \
  --arg p3 "$3" \
  --arg p4 "$4" \
  --arg p5 "$5" \
  --arg p6 "$6" \
  --arg p7 "$7" \
  --arg p8 "$8" \
  --arg p9 "$9" \
  --arg p10 "${10}" \
  --arg p11 "${11}" \
  '{
    param1: $p1,
    param2: $p2,
    param3: $p3,
    param4: $p4,
    param5: $p5,
    param6: $p6,
    param7: $p7,
    param8: $p8,
    param9: $p9,
    param10: $p10,
    param11: $p11
  }'
)

echo "$EVENT_BODY"
exec "${12}" -e "${EVENT_BODY}"

仅需在Dockerfile中增加jq安装步骤即可:

  • Alpine基础镜像:RUN apk add --no-cache jq
  • Debian/Ubuntu基础镜像:RUN apt update && apt install -y jq

额外优化建议:你原脚本中exec ${12}建议改为exec "${12}",避免Python脚本路径存在空格等特殊字符时执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:01