我正在使用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中所需的字符?我不熟悉该语言,所以不确定从哪里开始。更换'有\'会做的最小,我怀疑这份工作。
'
\'
好,知道该怎么办。Bash像预期的那样在本机上支持此功能,尽管与往常一样,语法并不是很容易猜测!
本质上${string//substring/replacement}返回您想要的图像,因此您可以使用
${string//substring/replacement}
MSG=${MSG//\'/\\\'}
去做这个。下一个问题是第一个正则表达式不再起作用,但是可以将其替换为
git log -n 1 --pretty=format:'%s'
最后,我什至不需要逃脱它们。相反,我只是将JSON中的所有’交换为\“。那么,您每天都会学到一些东西。