当编写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数据没有作为一个单元发送。
如何解决这个问题?任何建议都将受到高度赞赏。
最佳答案
我是从this post学到的使heredoc
与curl命令一起使用。
正如 @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
这样的编辑器时,它可能已经为您将缩进设置为空白。
关于bash - 如何在bash脚本中执行存储在heredoc中的curl命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69776439/