Bash在多行变量中添加额外的单引号

时间:2018-04-09 07:17:45

标签: json bash shell

我在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

由于我的命令形成错误,我无法获得所需的输出。有人可以指出我在做错的地方。

1 个答案:

答案 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")