curl命令请求json数据中的变量引用方法
curl命令请求json数据中的变量引用方法
·
一、问题出现场景
写 Elasticsearch 的 shell 部署脚本,在添加 Elasticsearch 自定义用户时,我执行了下面这条指令。
# read -p '请输入自定义用户admin的密码:' adm_pass
# curl -H "Content-Type:application/json" -u elastic:"$es_pass" -XPOST “$es_ip:9200/_xpack/security/user/admin” -d '{"username":"admin","password":"$adm_pass","roles":["admin"],"full_name":"admin","email":null,"metadata":{},"enabled":"true",}'
执行后出现了如下问题,在命令行中的 json 数据内引用了一个变量 $adm_pass ,引用后变量未解析,admin用户的密码被设置成了字符串 $adm_pass ,而不是我输入的自定义密码。
二、解决方法
先了解下 javascript 的 json 数据格式,属性名必须用双引号包裹。
1、var json = '{"name":"admin"}' //这个是正确的JSON格式
2、var json = '{\"name\":\"admin\"}' //这个是正确的JSON格式
3、var json = '{name:"admin"}' //这个是错误的JSON格式
4、var json = '{'name':'admin'}' //这个是错误的JSON格式
需要注意的是,在 json 数据里的变量需要用单引号 ’ ’ 括起来。这里就是我的命令出现问题的原因。加单引号后问题解决。
# curl -H "Content-Type:application/json" -u elastic:"$es_pass" -XPOST “$es_ip:9200/_xpack/security/user/admin” -d '{"username":"admin","password":"'$adm_pass'","roles":["admin"],"full_name":"admin","email":null,"metadata":{},"enabled":"true",}'
三、总结
curl命令请求json数据中的变量引用方法,总结如下:
1、json 中变量不能解析(我出错的)
'{"password":"$adm_pass"}'
2、json 中变量能解析(执行成功的)
'{"password":"'$adm_pass'"}'
3、我看到网上还有这样的格式,我没有去测试,但是也列出来,后面有空再测试一下
'{"password":"'"$adm_pass"'"}'
更多推荐
已为社区贡献2条内容
所有评论(0)