我正在使用 git,然后将提交消息和其他位作为 JSON 有效负载发布到服务器。
目前我有:
MSG=`git log -n 1 --format=oneline | grep -o ' .\+'`
将 MSG 设置为:
Calendar can't go back past today
然后
curl -i -X POST \
-H 'Accept: application/text' \
-H 'Content-type: application/json' \
-d "{'payload': {'message': '$MSG'}}" \
'https://example.com'
我真正的 JSON 有另外几个字段。
这很好用,但是当然,当我有一个提交消息(例如上面带有撇号)的提交消息时,JSON 是无效的。
如何转义 bash 中所需的字符?我不熟悉这种语言,所以不知道从哪里开始。用 \'
替换 '
至少可以完成我怀疑的工作。
最佳答案
jq
可以这样做。
轻量级、免费且用 C 编写,jq
享有广泛的社区支持,在 GitHub 上获得超过 15,000 颗星.我个人觉得它在我的日常工作流程中非常快速和有用。
$ echo -n '猫に小判' | jq -Rsa .
"\u732b\u306b\u5c0f\u5224"
解释一下,
-R
表示“原始输入”-s
表示“包含换行符”(助记符:“slurp”)-a
表示“ascii 输出”(可选).
表示“输出 JSON 文档的根”要修复 OP 给出的代码示例,只需通过 jq 管道。
MSG=`git log -n 1 --format=oneline | grep -o ' .\+' | jq -Rsa .`
https://stackoverflow.com/questions/10053678/