Передача переменных (содержащих пробелы) в поле curl --data - PullRequest
0 голосов
/ 18 мая 2019

Аргументы, содержащие пробелы, не будут правильно передаваться команде curl. Кавычки не передаются правильно в поле --data.

Если я просто выведу переменную 'curlData', которую я использую в команде curl, я получу все в порядке; пример:

$echo $curlData
'{"name":"jason","description","service"}'

Я не понимаю, почему curl не расходует эту переменную 'curlData', как ожидалось:

curl --data '{"name":"jason","description","service"}'

Вот пример моего кода:

read -p "Name : " repoName
read -p "Description []: " repoDescription

curlData="'"{'"'name'"':'"'$repoName'"','"'descripton'"':'"'$repoDescription'"'}"'"

curl --data $curlData $apiURL 

И ошибка:

curl: (3) [globbing] unmatched close brace/bracket in column 26

Спасибо за вашу помощь, я чувствую, что сейчас нахожусь в цитате.

Ответы [ 2 ]

2 голосов
/ 18 мая 2019
  1. Цитировать все расширения переменных,
  2. Чтобы убедиться, что curlData является допустимым значением JSON с правильно экранированными специальными символами и т. Д., Используйте для его создания.
curlData="$(jq --arg name "$repoName" --arg desc "$repoDescription" -nc '{name:$name,description:$desc}')"
curl --data "$curlData" "$apiURL"
0 голосов
/ 18 мая 2019

Если у вас есть доступ к любой форме управления пакетами, я настоятельно рекомендую jo.

curlData=$(jo name="$repoName" description="$repoDescription")
curl -d "$curlData" "$apiURL"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...