我在shell脚本中有一个函数,如下所示,我在curl命令中将json对象作为变量传递。
get_auth_token()
{
user_login_json=`cat <<- EOF
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "$user",
"password": "$pword"
},
"auth": null,
"id": 0
}
EOF`
auth_token_json=$(curl --silent -X POST -H 'Content-type:application/json' --data $user_login_json $api_endpoint)
}
我期待它扩展如下。
curl --silent -X POST -H Content-type:application/json --data '{"jsonrpc":"2.0","method":"user.login","params":{"user":"username","password":"some-password"},"auth":null, "id": 0}' some_url
然而,它正在扩展如下,我很惊讶这里的错误。
curl --silent -X POST -H Content-type:application/json --data '{' '"jsonrpc":' '"2.0",' '"method":' '"user.login",' '"params":' '{' '"user":' '"username",' '"password":' '"some-password"' '},' '"auth":' null, '"id":' 0 '}' some_url
由于我的命令形成错误,我无法获得所需的输出。有人可以指出我在做错的地方。
答案 0 :(得分:1)
我可以看到的直接问题是您尝试用作$user_login_json
的变量周围缺少引号。双引号变量应按预期保留格式。但即使没有引号,也无法重现您的实际问题。
最好的方法是让函数返回整个JSON字符串并将其传递给--data
部分,如下所示
jsonDump()
{
user="$1"; pword="$2"
cat <<- EOF
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "$user",
"password": "$pword"
},
"auth": null,
"id": 0
}
EOF
}
现在让函数直接返回输出
auth_token_json=$(curl --silent -X POST -H 'Content-type:application/json' --data "$(jsonDump "arg1" "arg2")" "$api_endpoint")