#shell #curl #sh
#оболочка #curl #sh
Вопрос:
когда я выполняю обычный curl с помощью скрипта оболочки, функция не работает.
Эта работа:
curl -s -v -X POST --data '{
"zoneConfig": {
"userID": "'$userid'",
"name": "'$myName'",
"id":"'$id'"
},
"delete": [
{
"id": "ID1"
},
{
"id": "ID2"
}
]
}' https://urlToAPI
Но как только я помещаю «удалить» в переменную, я получаю неопределенную ошибку от поставщика API
Это не работает
delete='{
"id": "ID1"
},
{
"id": "ID2"
}'
curl -s -v -X POST --data '{
"zoneConfig": {
"userID": "'$userid'",
"name": "'$myName'",
"id":"'$id'"
},
"delete": [
'$deleteValues'
]
}' https://urlToAPI
Но я не понимаю разницы, поскольку обе конфигурации одинаковы?
Комментарии:
1. добавьте
-trace-ascii dump.txt
в командную строку и проверьте этот файл после выполнения вашей команды…2. Я получаю «== Info: не удалось разрешить хост: «200905shwpkzwvw4coy»»
3. … который намекает на то, что вы каким-то образом получили аргумент
--data
неправильно (проблемы с кавычками?) таким образом, curl интерпретировал эту последовательность как URL-адрес вместо содержимого публикации.4. и, пожалуйста, отбросьте
-X POST
это заставляет мою голову болеть.5. @Daniel Stenberg Спасибо. Но что лучше? Когда я ищу в stackoverflow, я нахожу много примеров с этим
Ответ №1:
При интерполяции значение разбивается на пробелы.[1]
Как таковой,
a='a b c'
prog $a
эквивалентно
prog 'a' 'b' 'c'
Это разделение не происходит, если интерполяция происходит внутри двойных кавычек.
Как таковой,
a='a b c'
prog "$a"
эквивалентно
prog 'a b c'
Следовательно, вам необходимо изменить
$deleteValues
Для
"$deleteValues"
- Чтобы быть точным,
IFS
переменная env управляет разделением значения. Обычно он устанавливается таким образом, что разделение происходит по пробелам, табуляциям и переводам строк.