如何使用sed将JSON值替换为Bash变量且不使用斜杠分隔符
解决sed替换JSON中branch值时环境变量不解析的问题
问题原因
你用单引号包裹整个sed命令,Bash会将单引号内的内容原样输出,不会解析其中的环境变量${BRANCH_NAME},导致变量被直接当作字符串写入JSON。
解决方案
方法1:改用双引号包裹sed命令
将外层单引号改为双引号,同时转义内部的双引号,让Bash解析变量:
sed -i "/branch/c\ \"branch\" : \"${BRANCH_NAME}\"" settings.json
方法2:混合单双引号拆分命令
把需要解析变量的部分用双引号包裹,其余部分用单引号,避免全局转义:
sed -i '/branch/c\ \"branch\" : "'"${BRANCH_NAME}"'"' settings.json
更可靠的JSON处理方案:使用jq
sed本质是文本处理工具,对JSON的语法兼容性差(比如JSON格式变动时匹配失效)。推荐用专门的JSON工具jq,命令如下:
- 常规写法(生成临时文件替换原文件):
jq --arg branch "$BRANCH_NAME" '.branch = $branch' settings.json > temp.json && mv temp.json settings.json
- 支持in-place编辑的版本(jq 1.5及以上):
jq --arg branch "$BRANCH_NAME" '.branch = $branch' --in-place settings.json
内容的提问来源于stack exchange,提问作者Devontrae
相关产品推荐
相关产品推荐

