我正在尝试在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"}}'
我已将auth令牌替换为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。我显然不能正确地使用单引号和双引号的某种组合,但是尚不清楚中断的地方。
谢谢
Rob