You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何同时转义$与单引号避免变量被误解析?

解决方案

最稳妥的方式是将所有动态内容通过步骤的env块注入Shell环境,不要在run段的代码中直接使用${{ }}语法插入动态值,从根源上避免所有特殊字符($、单引号、双引号、反斜杠等)的解析问题。
GitHub Actions执行run段的脚本时,你在步骤env中定义的所有变量都会自动成为当前Shell的环境变量,直接读取即可,不需要做任何转义处理。
示例Workflow配置如下:

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

原方案问题说明

  1. 最初的代码直接把${{ env.body }}插入双引号包裹的字符串中,Shell会把内容中的$识别为变量前缀尝试解析,导致内容被篡改。
  2. 后续修改的版本把${{ env.body }}放到单引号里,虽然避免了$解析的问题,但只要env.body中出现单引号就会提前闭合字符串边界,触发Shell语法错误,同时还存在命令注入的安全隐患。

内容的提问来源于stack exchange,提问作者Natsuki Hoshii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:15:07