定义自定义字符串包装符号

定义自定义字符串包装符号

我需要使用curl如下所示的 REST 调用发布到 Slack:

curl -X POST --data-urlencode 'payload={"channel": "#deploybots", "username": "${GIT_BRANCH}-BOT", "text": "Message --> ${1}", "icon_emoji": ":${EMOJI}:"}' https://hooks.slack.com/...

问题在于有效负载参数:由于所有内容都包含在单引号内,因此不会对变量进行评估。

是否有另一种解决方案可以解决丑陋的问题,即将有效负载参数用双引号括起来,然后转义其中的所有双引号?

谢谢!

答案1

使用临时文件:

scratch="$(mktemp)"
trap 'rm -f "$scratch"' EXIT
cat > "$scratch" << EOF
{
  "channel": "#deploybots",
  "username":  "${GIT_BRANCH}-BOT", 
  "text": "Message --> ${1}", 
  "icon_emoji": ":${EMOJI}:"
}
EOF
curl -X POST --data-urlencode payload@"$scratch" https://hooks.slack.com/[...]

相关内容