首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在调用中正确传递变量?

如何在调用中正确传递变量?
EN

Stack Overflow用户
提问于 2020-03-23 17:20:48
回答 1查看 77关注 0票数 1

我希望通过bash将一个变量传递给api调用来下载文件。如何正确地将变量传递给http调用?下面是我的bash文件:

代码语言:javascript
复制
#!/bin/bash

#rm existing file
rm Desktop/ems/ems_raw_update.csv

#create a yesterday variable looking back 120 days
yesterday=$(date -d "$date -120 days" +"%Y-%m-%d")

#download data using that 120 days lookback
echo $yesterday | curl https://data.cityofnewyork.us/resource/76xm-jjuj.csv?$where=incident_datetime>='$yesterday' -o Desktop/ems/ems_raw_update.csv

我假设下载失败是因为我传递变量$yesterday的方式。例如,在浏览器中输入以下内容将下载适当的文件:

代码语言:javascript
复制
https://data.cityofnewyork.us/resource/76xm-jjuj.csv?$where=incident_datetime>=‘2019-12-25’

我还注意到,在我的目录中,我可以看到$yesterday变量。

代码语言:javascript
复制
total 3.8G
-rw-rw-r-- 1 me   me    0 Mar 22 19:48 =2019-11-23
-rw-rw-r-- 1 me   me    0 Mar 22 19:46 =2019-12-30
-rwxr-xr-x 1 root     root    488 Mar 23 13:12 downloader.sh
-rw-rw-r-- 1 postgres me 3.8G Mar 22 12:17 ems_raw.csv
-rw-rw-r-- 1 me   me   64 Mar 23 12:51 ems_raw_update.csv
-rw-rw-r-- 1 me   me    0 Mar 23 13:12 =$yesterday

如何正确下载此文件并确保删除局部变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 20:00:41

试试这个:

代码语言:javascript
复制
curl "https://data.cityofnewyork.us/resource/76xm-jjuj.csv?\$where=incident_datetime>='$yesterday'" -o Desktop/ems/ems_raw_update.csv

说明:在双引号内,shell将识别$作为启动变量替换,因此$yesterday将被扩展为变量的值。它不会在单引号中展开,这里看起来像单引号,但是由于单引号本身在一个双引号部分中,所以它们没有任何意义;它们只是普通字符(并将作为URL参数的一部分传递给curl )。?> (在>=中)也是shell语法中的特殊字符,但是双引号使它们成为普通字符。

$ in $where=incident_datetime则是另一回事。正如我所说的,在双引号中,$被视为开始替换,因此shell本身将尝试展开一个名为where的shell变量(该变量可能不存在,因此它将为空)。使用反斜杠(\$where=incident_datetime)对其进行转义可以防止这种情况,将其转换为将传递给curl的普通字符(后者将将其作为URL的一部分传递给服务器,这可能会将其视为数据库查询的一部分)。

还可以混合引用模式:将URL的部分放在单引号中,将部分与变量放在双引号中,但IMO在这种情况下更容易混淆。

哦,不要试图将变量输送到curl ( echo $yesterday |)部分。这适用于从输入流读取数据的事物,而curl不这样做(除非您告诉它,这里您不应该这样做-这是不相关的)。

顺便说一句,在您的示例浏览器URL中,日期值周围有curly unicode引号。我认为这是无意的(由于某些文本编辑器“有帮助地”转换它们),并且简单的ASCII引号是有意的。如果没有,则根据需要更换它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60818526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档