一尘不染

在bash中转义字符(对于JSON)

json

我正在使用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中所需的字符?我不熟悉该语言,所以不确定从哪里开始。更换'\'会做的最小,我怀疑这份工作。


阅读 220

收藏
2020-07-27

共1个答案

一尘不染

好,知道该怎么办。Bash像预期的那样在本机上支持此功能,尽管与往常一样,语法并不是很容易猜测!

本质上${string//substring/replacement}返回您想要的图像,因此您可以使用

MSG=${MSG//\'/\\\'}

去做这个。下一个问题是第一个正则表达式不再起作用,但是可以将其替换为

git log -n 1 --pretty=format:'%s'

最后,我什至不需要逃脱它们。相反,我只是将JSON中的所有’交换为\“。那么,您每天都会学到一些东西。

2020-07-27