我正在尝试编写一个脚本,它将在 bash 中执行两个 curl 请求。这是我的代码:
#!/bin/bash
ipadd="192.168.1.1"
start_url="http://$ipadd/startPlayer"
stop_url="http://$ipadd/stopPlayer"
header1="Accept: application/json"
header2="Content-Type: application/json"
stp="28508ab5-9591-47ed-9445-d5e8e9bafff6"
function start_player {
curl --verbose -H \"${header1}\" -H \"${header2}\" -X PUT -d '{\"id\": \"$stp\"}' ${start_url}
}
function stop_player {
curl -X PUT $stop_url
}
stop_player
start_player
stop_player 函数没有问题,但第一个函数不起作用。我只想执行以下 CURL 请求:curl --verbose -H "Accept: application/json" -H "Content-Type: application/json" -X PUT -d '{"id": "c67664db-bef7-4f3e-903f-0be43cb1e8f6"}' http://192.168.1.1/startPlayer
如果我回显 start_player 函数,则输出与应有的完全一样,但是如果我执行 start_player 函数,则会出现错误:Could not resolve host: application
. 我认为这是因为 bash 正在拆分标头,但为什么它与 echo 一起工作正常,但在 bash 中却不行?
你写了:
但看起来你真的想要:
使用您为
header1
and设置的值header2
,前者将导致curl
接收作为参数--verbose
,-H
,"Accept:
,application/json"
,-H
,"Content-Type:
, andapplication/json"
,而您确实希望每个标头值作为其自己的标记,未转义的双引号将提供。另外,我看到你通过
-d '{\"id\": \"$stp\"}'
. 你可能想要-d "{\"id\": \"$stp\"}"
那里。至于您关于为什么 whings 在 echo 中似乎可以正常工作的问题,“但在 bash 中却不行”,好吧,实际上 echo 并没有正常工作,只是它让这个事实很难看到。
相比:
和: