Попробуйте это:
curl "https://data.cityofnewyork.us/resource/76xm-jjuj.csv?\$where=incident_datetime>='$yesterday'" -o Desktop/ems/ems_raw_update.csv
Объяснение: Внутри двойных кавычек оболочка распознает $
как инициирующую подстановку переменной, поэтому $yesterday
будет расширен до значения переменной. Он не будет раскрываться в одинарных кавычках, и он выглядит как , как будто он здесь в одинарных кавычках, но поскольку одиночные кавычки сами находятся внутри двойных кавычек, они не имеют никакого значения; это просто обычные символы (и они будут переданы curl
как часть аргумента URL). ?
и >
(в >=
) также являются специальными символами в синтаксисе оболочки, но опять же двойные кавычки делают их обычными символами.
$
в $where=incident_datetime
другая история. Как я уже сказал, внутри двойных кавычек $
рассматривается как начало подстановки, поэтому сама оболочка будет пытаться развернуть переменную оболочки с именем where
(которая, вероятно, не существует, поэтому она будет пустой ). Экранирование с помощью backsla sh (\$where=incident_datetime
) предотвращает это, превращая его в обычный символ, который будет передан в curl
(который передаст его на сервер как часть URL, и это, вероятно, будет относиться к это как часть запроса к базе данных).
Было бы также возможно смешать режимы цитирования: поместить части URL в одинарные кавычки, а часть с переменной в двойные кавычки, но IMO это больше сбивает с толку в подобных случаях.
О, и не пытайтесь передать переменную в curl
(echo $yesterday |
) часть. Это для вещей, которые читают данные из их входного потока, чего не делает curl
(если вы не скажете это, чего не следует здесь делать - это не актуально).
Кстати, в вашем примере браузера URL, есть фигурные кавычки Unicode вокруг значения даты. Я предполагаю, что это непреднамеренно (из-за того, что какой-то текстовый редактор «услужливо» конвертирует их), и подразумеваются простые кавычки ASCII. Если нет, замените их при необходимости.