繁体   English   中英

如何在bash脚本中执行存储在heredoc中的curl命令?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM