Bash:变量插入curl调用不起作用

时间:2018-03-07 19:58:06

标签: bash curl

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

第一个命令剥离最后一个git commit的第一个字,第二个命令尝试对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 个答案:

答案 0 :(得分:2)

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

'{"item":"'"$SOMETHING"'"}'

代替。简要说明:

  • '{"item":"'是由包含双引号的单引号分隔的字符串
  • "$SOMETHING"是由双引号分隔的字符串,用于扩展变量$SOMETHING
  • '"}'又是'' - 分隔字符串,包含双引号
  • 简单地将这些字符串连续写入一行是字符串连接

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