这是我的剧本
#!/bin/bash
set -x
USERNAME="someUser"
curl -H "Content-Type: application/json" -X POST -d '{"auth":{ "client": $USERNAME, "password": "somePassword" }, "messages": { "UpdateProduct": {} }}' http://someDomain.com/services/json
它变成如下,它没有将$USERNAME
替换为someUser
curl -H "Content-Type: application/json" -X POST -d '{"auth":{ "client": $USERNAME, "password": "somePassword" }, "messages": { "UpdateProduct": {} }}' http://someDomain.com/services/json
但是如果我放入USERNAME,它就可以工作
curl -H "Content-Type: application/json" -X POST -d '{"auth":{ "client": "someUser", "password": "somePassword" }, "messages": { "UpdateProduct": {} }}' http://someDomain.com/services/json
答案 0 :(得分:2)
单引号不会扩展变量。您可以使用
之类的东西 -d '{"auth":{ "client": '"$USERNAME"', "password"...
,但是如果用户名包含双引号,它仍然会中断。
最干净的方法是使用了解JSON的工具,例如jq
:
$ USERNAME='"a"' jq '.username|=env.USERNAME' <<< '{"username":"..."}'
{
"username": "\"a\""
}