我试图从git存储库中获取所有分支,并将它们存储在PSObject中。我的代码在zsh和bash中工作,但在PowerShell核心中不工作。纵观PowerShell文档(引证规则和特殊字符),我看不到我需要逃避的任何东西。因为该行在zsh和bash中工作,所以我不认为jq是问题所在。
命令中失败的部分是:
jq --raw-input --slurp 'split("\n") | map(split("\t")) | .[0:-1]'
错误是:
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’):
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调用。
发布于 2020-01-07 20:11:46
根据错误消息,双引号被删除。因此,
split("\n") | map(split("\t")) | .[0:-1]变成了
split(\n) | map(split(\t)) | .[0:-1]编辑:根据评论,在这种情况下,加倍双引号是有效的。不使用反勾转义:
split(""\n"") | map(split(""\t"")) | .[0:-1]通常,尝试Powershell的转义字符--反勾` --来转义像这样的双引号是值得的,
split(`"\n`")(在这种特殊情况下不起作用。外壳逃逸可能很棘手。)
https://stackoverflow.com/questions/59634828
复制相似问题