cURL - это популярная команда Linux, которая позволяет загружать файлы и данные с URL-адресов. Она используется многими разработчиками и системными администраторами для передачи файлов и данных. Но иногда вам может понадобиться передать переменную оболочки в URL команды cURL. Это может сбить с толку новичков, поскольку добавление знака $ в начало переменной в команде cURL приведет к ошибке. В этой статье мы узнаем, как передать переменную в команде cURL.
Как передать переменную в команде cURL
Допустим, вы хотите выполнить следующую команду cURL с переменной оболочки job_id в ней.
1 | curl -u ${USER_ID}:${PASSWORD} -X GET 'http://www.example.com/job-details/${job_id}' |
Обычно в команде cURL необходимо использовать переменные оболочки в виде ${имя_переменной}, но приведенная выше команда выдаст ошибку.
1 | {"message":"Sorry. An unexpected error occured.", "stacktrace":"Bad Request. The request could not be understood by the server due to malformed syntax."} |
Это происходит потому, что cURL не может правильно разобрать ${job_id}. Допустим, ваша shell-переменная job_id имеет значение 1000, если попробовать выполнить следующую команду cURL, заменив ${job_id} на 1000, вы увидите, что она работает правильно.
1 | curl -u ${USER_ID}:${PASSWORD} -X GET 'http://www.example.com/job-details/1000' |
Это происходит потому, что когда мы используем переменные в shell, только переменные в двойных кавычках расширяются, а переменные в одинарных кавычках не расширяются. Поэтому в этом случае нужно просто заменить одинарные кавычки вокруг URL на двойные.
1 | curl -u ${USER_ID}:${PASSWORD} -X GET "http://www.example.com/job-details/${job_id}" |
Вот еще один пример, аналогичный приведенному выше, где мы задаем переменную shell и вызываем ее в команде cURL.
1 | job_id=150;curl -u ${USER_ID}:${PASSWORD} -X GET 'http://www.example.com/job-details/${job_id}' |
Аналогично, вот еще один пример, где мы используем несколько переменных оболочки, заключая их в двойные кавычки, вместо того, чтобы заключать их в фигурные скобки. Каждое из имен переменных, начинающихся с $, является переменной оболочки, определенной ранее.
1 2 3 4 5 6 | userdetails="$username:$apppassword" base_url_part='https://example.com/repositories' path="/$teamName/$repoName/downloads/$filename" base_url="$base_url_part$path"**strong text** curl -L -u "$userdetails" "$base_url" -o "$downloadfilename" |
В приведенной выше команде мы используем переменные shell, заключая их в двойные кавычки вместо фигурных скобок.
Итак, мы рассмотрели, как передавать переменные shell в запрашиваемом URL и значениях опций команды cURL.
Теперь давайте рассмотрим несколько иной пример использования переменных shell при передаче данных команде cURL. Допустим, вы хотите передать переменную оболочки $name в опции data -d команды cURL. Это можно сделать двумя способами. Первый - заключить весь аргумент в двойные кавычки, чтобы он был расширяемым, но в этом случае нужно убрать двойные кавычки, добавив перед ними обратную косую черту.
1 | curl -d "{\"query\":\"$name\", \"turnOff\":true}" ... |
Следующий вариант - заключить весь аргумент в одинарные кавычки, но в этом случае нам нужно отдельно заключить переменную shell в "'" (одинарная кавычка внутри двойных кавычек).
1 | curl -d '{"query":"'"$name"'", \"turnOff\":true}' ... |
Заключение
В этой статье мы научились вызывать команду cURL, используя переменные оболочки. Это полезно, если вы хотите вызывать команду cURL из сценария оболочки и использовать в нем заранее определенные переменные оболочки. Это позволяет сделать cURL более динамичным. Например, вы можете использовать этот метод для динамического построения URL в вашем сценарии оболочки. Фактически, вы даже можете использовать его в цикле для создания нескольких динамических URL при каждом вызове команды cURL.