@Atraides

Как передать параметр в CURL с пробелом или другими спец. символами?

Есть простой get запрос к API Битрикса:
curl -H "Content-Type: application/json" -d '['$taskid',{"TAGS":"'$oldtag',камера_1_off"}]' https://????.bitrix24.ru/rest/66/??????/task.item.update


в качестве параметра $oldtag передается строка в которой слова разделяются запятой, между словами могут быть пробелы например: тег1, еще тег, тег два . Задача к параметру oldtag дописать фразу - ,камера_1_off.
Так вот проблема в том что в bash скрипте почему то не корректно передается пробел через переменную $oldtag. Curl воспринимает как разделитель. Хотя если в терминале в ручную вбить тест в поле "TAGS":"тег один, тег два" - то все работает. Вопрос как передать текст внутри скрипта баша.
Весь скрипт целиком:
#!/bin/bash

taskid="$2"

#Парсит существующие теги
oldtag="$(curl -H "Content-Type: application/json" -d '[17267]' https://?????????.bitrix24.ru/rest/66/????????/task.item.getdata | jq -c '.result.TAGS' |  sed s/\"//g | sed s/\\[//g | sed s/\]//g)"


#oldtag=тег, новый тег, еще тег

#записывает старый тег+новый
curl -H "Content-Type: application/json" -d '['$taskid',{"TAGS":"'$oldtag',камера_1_off"}]' https://????.bitrix24.ru/rest/66/??????/task.item.update


5b7bc19a18eac364552823.png
Так выглядит ошибка.
А вот так выглядит если передавать текст тегов, без пробелов. все работает:
5b7bc2933edd6745694333.png

Принципе в CURL можно экранировать символы добавляя "\" sedом перед символом, но может есть более простое решение ?
  • Вопрос задан
  • 3829 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Возьмите его в кавычки.

'['$taskid',{"TAGS":"'$oldtag',камера_1_off"}]'

Вот тут из мешанины одинарных и двойных кавычек, вы $oldtag вообще в строку без кавычек отдаете. Баш его и распарсивает.

Попробуйте так
"[$taskid,{\"TAGS\":\"$oldtag,камера_1_off\"}]"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы