GitHub Action中处理含三种引号的提交消息避免命令执行失败
GitHub Action 保存含特殊字符的Commit Message解决方案
靠谱的两种写法
1. 用toJSON过滤器自动转义特殊字符
GitHub Actions表达式自带的toJSON会把字符串转成合法的JSON格式,自动处理双引号、单引号、反引号这些麻烦字符,直接用就行:
- name: 保存Commit Message run: printf '%s\n' ${{ toJSON(github.event.workflow_run.head_commit.message) }} >> tmp.txt
或者简化成echo写法,因为toJSON输出的是带双引号的合法字符串,直接输出不会出错:
- name: 保存Commit Message run: echo ${{ toJSON(github.event.workflow_run.head_commit.message) }} >> tmp.txt
2. 通过环境变量传递
把变量赋值给环境变量,bash会自动处理转义,用双引号包裹环境变量即可:
- name: 保存Commit Message env: COMMIT_MSG: ${{ github.event.workflow_run.head_commit.message }} run: echo "$COMMIT_MSG" >> tmp.txt
之前写法失效的原因
- 直接双引号包裹变量:变量里的双引号会提前闭合外层引号,导致命令语法错误。
- 单引号包裹变量:GitHub会直接展开变量内容,若变量含单引号,会闭合外层单引号,触发语法问题。
- 反引号包裹:bash会把反引号里的内容当作命令执行,不仅存不了内容还可能触发危险操作。
内容的提问来源于stack exchange,提问作者torwent
相关产品推荐
相关产品推荐

