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

Jos*_*ith 2 bash curl

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

第一个命令从最后一次 git 提交中删除第一个单词,第二个命令尝试调用POSTapi 端点,并将同一变量作为调用的一部分,第三个命令仅打印该变量,以确保它是好好工作。请参阅下面的代码

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"
Run Code Online (Sandbox Code Playgroud)

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

And*_*kin 5

单引号不会展开$variables其中的内容。尝试

'{"item":"'"$SOMETHING"'"}'
Run Code Online (Sandbox Code Playgroud)

反而。简要说明:

  • '{"item":"'是由单引号分隔且包含双引号的字符串
  • "$SOMETHING"是一个用双引号分隔的字符串,它扩展变量$SOMETHING
  • '"}'又是一个''包含双引号的分隔字符串
  • 简单地将这些字符串无间隙地写在一行中就是字符串连接

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