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
相关产品推荐
相关产品推荐

