Я должен установить в переменное истинное/ложное значение и отправить его в json с curl
команда:
name=$1
sx=$2
`curl -d '{"name":"'"$name"'", "sex":true}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc`
Переменная sx
принимает значение male
или female
как установить соответствующее булево значение в sex
переменная?
Используя переменную для целой строки JSON и создания это соединяет мудрый, может сделать заключение в кавычки менее громоздкого и сделать curl
командная строка, более читаемая и легче поддержать даже при том, что полный код является намного более подробным.
Создание строки сделано здесь с помощью строки сам оператор конкатенации +=
. Отметьте это в json_string+=$name
, например, никакое заключение в кавычки не необходимо, так как нет никакого выполняемого разделения слова, и никакие специальные символы не присутствуют на правой стороне.
Можно использовать ассоциативный массив для поиска значения, которое Вы хотите на основе обеспеченного ключа. Здесь я присваиваю пар индивидуально. Ниже я покажу, как сделать их в одном присвоении.
name=$1
sx=$2
declare -A sexes
sexes[male]=false
sexes[female]=true
json_string='{"name":"'
json_string+=$name
json_string+='", "sex":'
json_string+=${sexes[$sx]}
json_string+='}'
curl -d "$json_string" " -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
Можно разбить JSON еще больше, чтобы заставить его выглядеть немного более структурированным в коде (содержание получившей строки все еще будет однострочной строкой). Идеально при использовании более сложного JSON, чем это, необходимо использовать созданный инструмент JSON цели для создания структуры.
Вот то, как можно сделать объявление ассоциативного массива и присвоение внезапно. Первый пример находится на одной строке, и второе находится на нескольких строках - снова для улучшенной удобочитаемости и пригодности для обслуживания.
declare -A sexes='([female]="true" [male]="false")'
declare -A sexes='(
[female]="true"
[male]="false"
)'
Самый легкий способ отобразить строку male
к также true
или false
(в зависимости от Ваших потребностей) и female
к некоторому другому значению простое if…then…else
пункт. Прием является заключением в кавычки, но Вы уже получили это с $name
переменная. Так:
if [ "$sx" = "male" ]; then
sex="true"; # or whatever you consider male sex to be
else
sex="false"; # just the opposite, see above
fi
curl -d '{"name":"'"$name"'", "sex":'$sex'}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
В Вашем случае Вы используете json и можете использовать "верный" текст и текст "ложь".
Вы должны добавить к логике сценария удара:
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
затем выполненная вихревая команда с ... {"name":"'"$name"'", "sex":\"$sex\"} ...
или просто ... {"name":"'"$name"'", "sex":$sex} ...
Сценарий тестирования:
#!/bin/bash
sx="male"
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
echo \"$sex\"