首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell核心没有很好地处理jq

PowerShell核心没有很好地处理jq
EN

Stack Overflow用户
提问于 2020-01-07 19:24:27
回答 1查看 215关注 0票数 0

我试图从git存储库中获取所有分支,并将它们存储在PSObject中。我的代码在zsh和bash中工作,但在PowerShell核心中不工作。纵观PowerShell文档(引证规则特殊字符),我看不到我需要逃避的任何东西。因为该行在zsh和bash中工作,所以我不认为jq是问题所在。

命令中失败的部分是:

jq --raw-input --slurp 'split("\n") | map(split("\t")) | .[0:-1]'

错误是:

代码语言:javascript
复制
jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:
split(\n) | map(split(\t)) | .[0:-1]
jq: 1 compile error

我使用的整个命令是(在bash中用\替换‘newline’):

代码语言:javascript
复制
git for-each-ref --sort='-authordate:iso8601' `
    refs/heads `
    --format='%(refname:short)%09%(creatordate:rfc)%09%(creator)%09%(committerdate:rfc)%09%(committeremail)' `
    | jq --raw-input --slurp 'split("\n") 
      | map(split("\t")) 
      | .[0:-1] 
      | map( {
        "branchName": .[0], 
        "AuthorDate": .[1], 
        "Author": .[2], 
        "CommitDate": .[3], 
        "Committer": .[4]
      })'

我的PowerShell核心版本是: 6.2.1我使用iTerm2运行。我通过PowerShell通过pwsh调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-07 20:11:46

根据错误消息,双引号被删除。因此,

代码语言:javascript
复制
split("\n") | map(split("\t")) | .[0:-1]

变成了

代码语言:javascript
复制
split(\n) | map(split(\t)) | .[0:-1]

编辑:根据评论,在这种情况下,加倍双引号是有效的。不使用反勾转义:

代码语言:javascript
复制
split(""\n"") | map(split(""\t"")) | .[0:-1]

通常,尝试Powershell的转义字符--反勾` --来转义像这样的双引号是值得的,

代码语言:javascript
复制
split(`"\n`")

(在这种特殊情况下不起作用。外壳逃逸可能很棘手。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59634828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档