当前位置: 首页 > 面试题库 >

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

宗政小林
2023-03-14
问题内容

我正在使用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}返回您想要的图像,因此您可以使用

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

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

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

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



 类似资料:
  • 问题内容: 为了回答这个问题,我设法通过转义反斜杠来使字符串成为转义字符。 当我尝试将其概括为转义所有转义的字符时,它似乎无能为力: 但是对于特定的转义字符使用相同的方法,它确实起作用: 有一般的方法可以做到这一点吗?应包括,,,等。 问题答案: 使用r’text’将字符串定义为raw,如下面的代码所示:

  • 问题内容: 我从公共API接收到一个JSON对象,该对象本身具有一个转义的JSON字符串。 我如何将此属性转换为实际的JSON对象(未转义),以便使用NewtonSoft Json.NET反序列化整个响应? 问题答案: 这是我根据 Sam 的答案使用的可行解决方案:

  • 问题内容: JavaScript是否具有诸如PHP的(或)函数之类的内置函数,以向需要转义字符串的字符添加反斜杠? 例如,这: 这是一个带有“单引号”和“双引号”的演示字符串。 …会成为: 这是一个带有'单引号'和\“双引号\”的演示字符串。 问题答案:

  • 给定一个字符串,我想用一个斜杠替换所有双斜杠,然后用替换

  • 问题内容: 我有一个Unicode转义的字符串: 我想将此字符串转换为unicode非转义版本 我该怎么做呢? 问题答案: 对其进行编码(使用任何编解码器,utf-8可能都可以),然后使用对其进行解码:

  • 我有一个统一码转义字符串: 我想将此字符串转换为unicode未转义的版本 我该怎么做?