我需要设置变量的真/假值并使用curl
命令将其发送到 json:
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
变量中?
答案1
将字符串映射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
答案2
在您的情况下,您使用 json 并且可以使用文本“true”和文本“false”。
您需要添加 bash 脚本逻辑:
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
... {"name":"'"$name"'", "sex":\"$sex\"} ...
然后使用或仅运行 curl 命令... {"name":"'"$name"'", "sex":$sex} ...
测试脚本:
#!/bin/bash
sx="male"
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
echo \"$sex\"
答案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"
)'