如何将Bash变量$repo_url加入git log输出的格式化JSON中
Bash变量插入git log pretty format JSON输出解决方案
问题原因
Bash中单引号属于强引用符号,包裹在单引号内的所有字符都会保留字面含义,因此你写在格式字符串单引号内的$repo_url不会被解析为变量,只会原样输出字符串。
解决方法
将需要变量展开的位置从单引号中剥离,用双引号包裹变量保证正常解析,再和其余静态格式字符串拼接即可,修改后的可运行代码如下:
git log -n 1 \ --pretty=format:'{"repo": "'"$repo_url"'", "commit": "%H", "author": "%aN <%aE>", "date": "%ai", "message": """%B""", "notes": """%N""" },' \ $@ | awk 'BEGIN { print("[") } { print($0) } END { print("]") }' | python -u -c \ 'import ast,json,sys; print(json.dumps(ast.literal_eval(sys.stdin.read())))'
补充注意事项
如果你的repo_url可能包含双引号、反斜杠等JSON特殊字符,建议先对变量做转义处理再插入,避免生成非法JSON格式:
# 提前转义特殊字符 repo_url_escaped=$(printf '%s' "$repo_url" | sed 's/[\\"]/\\&/g')
之后将上面代码中的$repo_url替换为$repo_url_escaped即可。
内容的提问来源于stack exchange,提问作者Yashika Sharma
相关产品推荐
相关产品推荐

