将 Bash 变量传递给 CURL

Vik*_*ram 7 bash shell curl

当我给出这样的值时,它会起作用:

curl --silent \ --insecure \ -X POST \ -d '{"Name" : "Vikram"}' \ -H "Content-Type: application/json" \ $restUrl
Run Code Online (Sandbox Code Playgroud)

但是当我这样给它时:

post="'{\"Name\" : \"Vikram\"}'"    
echo $post   // Prints '{"Name" : "Vikram"}'
echo ${post} // Prints '{"Name" : "Vikram"}'
Run Code Online (Sandbox Code Playgroud)

但以下不起作用并引发 400 错误:

curl --silent \ --insecure \ -X POST \ -d ${post} \ -H "Content-Type: application/json" \ $restUrl
Run Code Online (Sandbox Code Playgroud)

twm*_*twm 9

似乎有多个问题。

1)为了解决您的标题提出的问题,当您使用 $post 作为参数时,其值中的空格会导致 Bash 将其视为多个参数。尝试在它周围加上引号,以便将其视为一个参数。

2)我猜你在 $post 中添加了单引号,试图让 Bash 将其视为单个参数。尝试删除单引号。

3)至少对我来说,curl命令中的所有反斜杠都导致它失败。也许你把它分成多行,复制/粘贴没有翻译。我在下面的示例中删除了它们。

放在一起:

post="{\"Name\" : \"Vikram\"}"
curl --silent --insecure -X POST -d "${post}" -H "Content-Type: application/json" $restUrl
Run Code Online (Sandbox Code Playgroud)