bash - Bash 和 curl 脚本问题
问题描述
我正在尝试在 bash 脚本中包含这个 curl 命令(到 Dropbox 审计 api):
curl -X POST https://api.dropboxapi.com/2/team_log/get_events --header 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXX' --header 'Content-Type: application/json' --data '{"time":{"start_time":"2018-07-16T18:07:56Z"}}'
我已经用 XXXXX 等替换了身份验证令牌。
在我的脚本中,时间戳实际上是一个名为 $LAST 的变量。
我像这样构建 curl 命令:
LAST=$(date +"%Y-%m-%dT%H:%m:%SZ")
DROPBOX1=$(echo 'curl -X POST https://api.dropboxapi.com/2/team_log/get_events --header '\''Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXX'\'' --header '\''Content-Type: application/json'\'' --data '\''{"time":{"start_time":"')
DROPBOX2=$(echo '"}}'\''')
CURLSTRING=$DROPBOX1$LAST$DROPBOX2
echo $CURLSTRING
$CURLSTRING
我以这种方式构建它,否则由于 curl POST 中的所有单引号和双引号,$LAST 会出现问题。
运行那个小脚本会给出以下输出:
curl -X POST https://api.dropboxapi.com/2/team_log/get_events --header 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXX' --header 'Content-Type: application/json' --data '{"time":{"start_time":"2018-07-16T18:07:56Z"}}'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 175 0 127 100 48 232 87 --:--:-- --:--:-- --:--:-- 231
curl: (6) Could not resolve host: Bearer
curl: (6) Could not resolve host: XXXXXXXXXXXXXXXXXXXXXXXXX'
curl: (6) Could not resolve host: application
可以看出,脚本中的 echo 命令显示了看起来完全有效的 curl 命令 - 实际上,如果我将该输出剪切并传递到命令行,它就可以工作。但是,由于 bash 脚本本身中显示的其余输出,curl 命令没有被正确解释。
我一生都无法弄清楚为什么会这样。显然 echo 正确地保留了字符串,而 curl 命令以某种方式分解了 $CURLSTRING。我显然没有正确使用单引号和双引号的某种组合,但是在哪里中断还不清楚。
谢谢
抢
解决方案
推荐阅读
- javascript - JS 正则表达式匹配括号之间的最后一次出现
- java - 如何从java中的一组数据中获取最后一句话?
- marklogic - 使用 ML-Gradle 任务自动运行 Marklogic Javascript 文件和代码
- javascript - 我如何编写一种方法来“退格”文本文档中的一行
- reactjs - 导出 react-scrollmagic 时的问题
- android - 如何在 androidStudio 中为组应用样式
- sql - 如何在表格中加入分组和过滤字段?
- javascript - package.json 是否应该包含在 .prettierignore 文件中?
- angular - 如何将外部 html 和 js 脚本添加到 Angular 9 视图中
- c# - 如何使用 System.Text.Json 将 json 数组转换为集合;