gpt4 book ai didi

bash - 如何在 bash 中为 Ubuntu 正确传递一个变量以进行 API 调用?

转载 作者:行者123 更新时间:2023-12-04 18:44:16 25 4
gpt4 key购买 nike

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

#!/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 的方式。例如,在浏览器中输入以下内容将下载正确的文件:
https://data.cityofnewyork.us/resource/76xm-jjuj.csv?$where=incident_datetime>=‘2019-12-25’

我还注意到在我的目录中我可以看到 $yesterday 变量。
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

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

最佳答案

尝试这个:

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 语法中的特殊字符,但双引号再次使它们成为普通字符。
$$where=incident_datetime是一个不同的故事。正如我所说,在双引号内, $被视为开始替换,因此 shell 本身会尝试扩展名为 where 的 shell 变量(可能不存在,所以它会出现空白)。用反斜杠( \$where=incident_datetime )转义它可以防止这种情况发生,将它变成一个普通字符以传递给 curl (这会将其作为 URL 的一部分传递给服务器,并且可能会将其视为数据库查询的一部分)。

也可以混合引用模式:将 URL 的一部分放在单引号中,将带有变量的部分放在双引号中,但 IMO 在这种情况下会更加困惑。

哦,不要尝试将变量通过管道传递给 curl ( echo $yesterday | )部分。这适用于从输入流中读取数据的东西, curl没有(除非你告诉它,你不应该在这里 - 它不相关)。

顺便说一句,在您的示例浏览器 URL 中,日期值周围有弯曲的 unicode 引号。我认为这是无意的(由于某些文本编辑器“有用地”转换它们),并且打算使用纯 ASCII 引号。如果不是,请根据需要更换它们。

关于bash - 如何在 bash 中为 Ubuntu 正确传递一个变量以进行 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60818526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com