Bash:将变量插入到 curl 调用中不起作用[重复]

Posted

技术标签:

【中文标题】Bash:将变量插入到 curl 调用中不起作用[重复]【英文标题】:Bash: variable insertion into curl call not working [duplicate] 【发布时间】:2018-08-16 01:07:02 【问题描述】:

我有一个非常简单的 bash 脚本,其中包含三个命令。

第一个命令从最后一次 git 提交中删除第一个单词,第二个命令尝试对 api 端点进行 POST 调用,将相同的变量作为调用的一部分,第三个命令只是打印变量,以确保其正常工作。请看下面的代码

SOMETHING=$(git log -1 --pretty=%B | head -n1 | sed -e 's/\s.*$//' | cut -d ' ' -f1)
curl -X POST \
  http://www.someurl.com/ \
  -H 'Cache-Control: no-cache' \
  -d '"item":"$SOMETHING"'
echo "variable was $SOMETHING"

当我运行该 bash 脚本时,我收到来自服务的响应,说 XML 中的“项目未正确设置”,但它确实正确地回显了正确的变量。所以我知道第一行是有效的。如果我复制该 curl 命令并将其粘贴到 bash 中,将 $SOMETHING 替换为实际值,它就可以正常工作。

【问题讨论】:

【参考方案1】:

单引号不会扩展其中的$variables。 试试

'"item":"'"$SOMETHING"'"'

相反。简要说明:

'"item":"' 是由单引号分隔的字符串,其中包含双引号 "$SOMETHING" 是一个由双引号分隔的字符串,它扩展了变量 $SOMETHING '"' 又是一个包含双引号的 '' 分隔字符串 简单地将这些字符串连续写成没有间隙的就是字符串连接

通过这种方式,您可以获得变量扩展,但不必插入任何反斜杠来转义双引号。

【讨论】:

这完美地解决了我的问题。谢谢!当它允许我时会接受答案。 得知此事后,我想哭。我以为它与单引号有关!

以上是关于Bash:将变量插入到 curl 调用中不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

lockfile-create 在 bash 脚本中不起作用

类变量分配在 Alamofire 请求块中不起作用

为啥将命令输出定向到变量在批处理文件中不起作用

模式匹配在 bash 脚本中不起作用

为啥我的 cURL 请求在 XAMPP 中不起作用?

插入许多在 mongoDB 中不起作用,为啥?