То, как установить булево значение в вихревой команде, использовало сценарий удара

Я должен установить в переменное истинное/ложное значение и отправить его в 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 переменная?

2
задан 17 November 2018 в 11:59

3 ответа

Используя переменную для целой строки 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"
)'
2
ответ дан 2 December 2019 в 01:29

Самый легкий способ отобразить строку 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
4
ответ дан 2 December 2019 в 01:29

В Вашем случае Вы используете 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\"
3
ответ дан 2 December 2019 в 01:29

Другие вопросы по тегам:

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