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"'"}'
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值