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

本地正常运行的jq数组筛选器在GitHub工作流中失效,原因何在?

问题

在GitHub工作流中用jq提取JSON数组时触发语法错误,工作流配置如下:

name: Test

on:
  workflow_dispatch:

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Test
      run: echo $(echo '{"value":[{"displayName":"test"}]}' | jq -c '.value.[]')

运行时报错:

Run echo $(echo '{"value":[{"displayName":"test"}]}' | jq -c '.value.[]')
jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.value.[]       
jq: 1 compile error

相同命令在本地Shell中能正常执行,为何在GitHub运行器里失效?

原因与解决方法

这是因为GitHub Actions的Shell环境会对未正确引用的方括号做路径扩展(尝试匹配当前目录下的文件),导致jq实际接收到的表达式不是.value.[],而是被Shell解析后的错误内容,最终触发语法错误。本地环境可能因为当前目录无匹配文件,或者Shell配置禁用了路径扩展,所以命令能正常运行。

修正方式有两种:

  1. 调整jq表达式并确保正确传递
    把.value.[]简化为.value[],避免Shell对特殊字符的错误解析:
    - name: Test
      run: echo $(echo '{"value":[{"displayName":"test"}]}' | jq -c '.value[]')
    
  2. 用多行命令拆分逻辑(更易维护)
    把命令拆成多行,彻底规避嵌套引号和特殊字符解析问题:
    - name: Test
      run: |
        JSON_CONTENT='{"value":[{"displayName":"test"}]}'
        EXTRACTED=$(echo "$JSON_CONTENT" | jq -c '.value[]')
        echo "$EXTRACTED"
    

内容的提问来源于stack exchange,提问作者Weili Gao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:33:37