curl 有效,但不会在 BASH 脚本中执行

Max*_*wer 3 bash curl

以下 curl 命令从命令行工作。我得到了服务器的有效响应。

curl -X POST https://somebaseurl/api/v1/auth/login -H "Content-Type:application/json" -d '{"email": "foo@bar,com", "password": "foo"}'
Run Code Online (Sandbox Code Playgroud)

但是我正在尝试编写这样的 BASH 脚本

baseUrl=https://somebaseurl
contentTypeJson="\"Content-Type:application/json\""
credentials="'{\"email\": \"foo@bar.com",\"password\": \"foo\"}'"
login="curl -X POST $baseUrl/api/v1/auth/login -H $contentTypeJson -d $credentials"
 echo ${login}

response=`${login}`
echo ${response}
Run Code Online (Sandbox Code Playgroud)

我从服务器收到错误的请求响应。但是,如果我将回显的 curl 命令直接复制到我的终端中,它就可以工作。我究竟做错了什么?

编辑:

根据要求,我收到错误请求请求 'POST api/v1/auth/login' [预期应用程序/json]

l'L*_*L'l 5

Bash并且cURL可以非常特别地如何在脚本中使用引号。如果逃避被抛弃,那么其他一切都很容易失败。通过 shellcheck.net 运行脚本通常对识别此类问题非常有帮助。以下是根据建议修复后的脚本修订版:

#!/bin/bash

baseUrl="https://somebaseurl/api/v1/auth/login"
contentTypeJson="Content-Type:application/json"
credentials="{\"email\": \"foo@bar.com\", \"password\": \"foo\"}"
login="$(curl -X POST "$baseUrl" -H "$contentTypeJson" -d "$credentials")"
echo "${login}"

response="${login}"
echo "${response}"
Run Code Online (Sandbox Code Playgroud)