[英]How to execute curl command stored in heredoc in bash script?
在编写 bash 脚本时,我想将整个 curl 命令存储在heredoc
以获得更好的布局。 以下工作正常:
#/bin/bash
read -r -d '' command1 <<- MULTI_STRING_SCOPE
curl -v www.stackoverflow.com
MULTI_STRING_SCOPE
但是当使用-d
选项添加一些 json 数据时,该命令执行很奇怪。 例如:
#/bin/bash
read -r -d '' command2 <<- MULTI_STRING_SCOPE
curl -v www.stackoverflow.com
-d '{
"hello":"world"
}'
MULTI_STRING_SCOPE
response2=$(${command2})
来自终端的错误日志:
curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched close brace/bracket in URL position 1:
}'
并且似乎 curl 将行}'
作为一个单独的 url,因此 json 数据没有作为一个单元发送。
如何解决问题? 任何建议将不胜感激。
我从这篇文章中学到了使用 curl 命令使heredoc
工作。
正如@Gordon Davisson 在当前帖子中所做的评论,我们不应该将命令与数据混合使用。 由于设置为-d
选项的 json 数据只是数据,其他部分是命令,所以我决定使用heredoc
只存储 json 数据,其他部分保留为命令本身,而不是通过heredoc
将它们存储在字符串中。
结果 bash 脚本应该是这样的:
#/bin/bash
response3=$(curl -v www.stackoverflow.com \
-d @- <<- MULTI_STRING_SCOPE
{
"hello":"world"
}
MULTI_STRING_SCOPE
)
注意: heredoc
缩进只适用于制表符,不适用于空格。 小心,尤其是当您使用Visual Studio Code
等编辑器时,它可能已经为您设置了缩进为空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.