GitHub Actions中Bash的jq命令PowerShell替代方案求助
PowerShell替代GitHub Actions中Bash密钥处理命令的解决方案
场景说明
在GitHub Actions工作流中,通过toJSON上下文设置SECRETS环境变量,需要循环处理类似$secret = "SEC1, SEC2 "格式的密钥值。原Bash处理命令如下:
value="$(jq -r --arg key "$secret" '.[$key]' <<< "$SECRETS" | sed 's|.|& |g')"
错误分析
你尝试的PowerShell代码报错,是因为错误地将环境变量$env:SECRETS放在管道右侧。PowerShell的管道规则要求左侧是产生输出的命令/表达式,右侧是接收输入的命令,直接把字符串值放在管道右侧会触发语法错误。
正确的PowerShell替代方案
有两种可行写法:
写法1:使用Here-String传递输入(适用于PowerShell Core)
$value = (jq -r --arg key "$secret" '.[$key]' <<< "$env:SECRETS") -replace '(.)', '$1 '
写法2:使用管道传递输入(兼容性更好,支持Windows PowerShell)
$value = ($env:SECRETS | jq -r --arg key "$secret" '.[$key]') -replace '(.)', '$1 '
代码说明
- 通过
--arg key "$secret"将当前循环的密钥名称传递给jq,从$env:SECRETS的JSON结构中提取对应值 - 使用PowerShell的
-replace '(.)', '$1 '替代Bash中sed的功能,给每个字符后添加空格
内容的提问来源于stack exchange,提问作者wehelpdox
相关产品推荐
相关产品推荐

