2

一个没什么用的转义技巧

 2 years ago
source link: https://blog.huoding.com/2021/11/16/966
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

火丁笔记

多研究些问题,少谈些主义。

火丁笔记 搜索

← 上一篇

一个没什么用的转义技巧

发表于2021-11-16

最近我用命令行工具来测试 rpc 服务,因为此命令行工具要求输入数据是 json 格式,所以免不了要在 shell 环境构造一些 json 字符串:

shell> echo '{"content": "$(base64 foo.docx)", "type": "docx"}'

如上,我想把文件 foo.docx 的内容通过 base64 编码,然后放到 json 字符串里,但是它并不能正常工作,因为它是一个单引号字符串,命令在单引号里的是不能展开的,那换成双引号可不可以?当然可以,但是因为 json 本身包含很多双引号,所以免不了转义:

shell> echo "{\"content\": \"$(base64 foo.docx)\", \"type\": \"docx\"}"

实际上我的 json 字符串里有很多字段,把双引号一个一个转义的话多半会让人崩溃。不瞒大家说,我最开始写出如上代码的时候,脑瓜子嗡嗡的,好在最后我想到了一个绝妙的解决方法:既然用双引号字符串不可避免会带来转义问题,那么就放弃双引号字符串,而是使用单引号字符串,然后把里面的命令用单引号包起来:

shell> echo '{"content": "'$(base64 foo.docx)'", "type": "docx"}'

为什么这样可以?其实如上单引号字符串实际上是三个字符串,分别是:

  • ‘{“content”: “‘
  • $(base64 foo.docx)
  • ‘”, “type”: “docx”}’

细节不用解释了吧,脑瓜子再也不会嗡嗡的了,整个世界清静了…

此条目是由老王发表在Technical分类目录的。将固定链接加入收藏夹。

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论

显示名称 *

电子邮箱地址 *

网站地址


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK