聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

一个没什么用的转义技巧

2021-11-16 17:46 浏览: 2657720 次 我要评论(0 条) 字号:

最近我用命令行工具来测试 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”}’

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



网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复