从 jq select 结果中获取第一个/最后一个/第 n 个结果

从 jq select 结果中获取第一个/最后一个/第 n 个结果

我正在尝试找到一种方法将当前脚本的结果通过管道传输到另一个命令中,这将使我只得到在此处选择的数组的最后结果:

jq -r --arg name "$1" '.packageAliases | to_entries[] | select(.key | startswith($name))' sfdx-project.json

sfdx-project.json文件是一个 json 文件,其中有一个名为 的嵌套 JSON packageAliases,脚本会向其中添加新的包版本号和 Id。

{
 "data" : "that",
 "is" : "not",
 "really" : "necessary",
 "packageAliases" : {
  "package" : "0H0fffff",
  "[email protected]" : "04t0xxxxxx"
 }
}

这个想法是选择特定包名称的所有包别名,并留下最后一个,这是我应该使用的那个。

select当我尝试将我从into获得的结果通过管道传输时last,出现以下错误: Cannot index object with number

虽然我认为 select() 命令返回一个数组(当我回显中间结果时我也得到了这个数组)

将last()命令放在其他地方只会让我在数组中留下几个空值,但我仍然没有得到我真正需要的单个值。

我需要对命令进行哪些更改才能从数组中获取最后一个条目select()

答案1

jq -r --arg name "$1" 'last(.packageAliases | to_entries[] | select(.key | startswith($name)))

将整个命令包装在 last() 中就达到了目的,因为它是整个管道链的结果。

相关内容