有没有办法在 bash 中一起转义 $ 和单引号?

Is there a way to escape $ and single quotes together in bash?

我是运行下面的代码,但是如果env.body包含$,就会被翻译成变量

printf -v markdown_message_unescaped %b "<${{ env.URL }}|*${{ env.body }}*>\n"
jq -n -r --arg text "$markdown_message_unescaped" '{"text": $text}'|curl -X POST -H 'Authorization: Bearer ${{ secrets.TOKEN }}' -H "Content-Type: application/json" -d @-  ${{ env.URL }}
 

我将代码修改为如下所示以转义 $,但如果 env.body.

中包含单引号,则效果不佳
body='${{ env.body }}'
printf -v markdown_message_unescaped %b "<${{ env.URL }}|*$body*>\n"
jq -n -r --arg text "$markdown_message_unescaped" '{"text": $text}'|curl -X POST -H 'Authorization: Bearer ${{ secrets.TOKEN }}' -H "Content-Type: application/json" -d @-  ${{ env.URL }}

有什么办法可以解决这个问题吗?

您可以使用 heredoc,它将按字面意义保留所有内容(除了选择的 EOF 字符串)。您必须使用 yaml 管道运算符来保留新行,因为它们是 heredoc 语法所必需的。

run: |
  markdown_msg=$(
  cat <<"EOF"
  ${{ env.body }}
  EOF
  )
  printf -v markdown_msg %b "$markdown_msg"
  jq --arg text "$markdown_msg" # etc

重要的是 bash 在一行中看到 EOF,没有前导或尾随空格。 yaml 文件中的缩进将在传递给 bash.

之前去除