对于如何在 bash 脚本中转义引号,我遇到了一个有趣的挑战。
我的 bash 脚本有一个很长的 curl 调用,其中传递了一个大的 -d json 结构。
#!/bin/bash
Value4Variable=Value4
curl -s -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d \
'{"Variable1":"Value1",
"Variable2":"Value2\'s", # escape of quote doesnt work because of the previous single quote and backslash
"Variable3":"Value3",
"Variable4":"'"$Value4Variable"'",
"Variable5":"Value5"
}' \
https://www.hashemian.com/tools/form-post-tester.php
在 json 结构中添加单引号的最佳方法是什么?我尝试了各种组合,但没有成功。
有多种方法可以用不同的引号转义长字符串。最简单的就是结束单引号,转义单引号:
但是你可以做一些更好的事情。Heredocs 是避免引用问题的好方法:
@-
告诉 curl 从标准输入读取并<<EOF
启动将被输入 curl 标准输入的 heredoc。heredoc 的好处是您不需要转义任何引号,并且可以在其中使用 bash 变量,无需担心如何转义引号并使整个内容更具可读性。我会使用
--data @filename
符号从文件中读取数据:样本
json-data-file
内容:请求:
输出:
考虑使用 JSON 感知工具来创建 JSON 文档。这样做将消除手动转义特殊字符(如制表符、换行符、双引号等)的需要。单引号实际上是不需要在 JSON 中转义的字符。你只需要确保你使用正确的引号让 shell 正确识别你的字符串。
这里的
jo
工具使从命令行创建 JSON 文档变得非常容易:或者
任何一段代码的响应都是