jq 선택 결과에서 첫 번째/마지막/n번째 결과 가져오기

jq 선택 결과에서 첫 번째/마지막/n번째 결과 가져오기

현재 스크립트의 결과를 여기에서 선택한 배열의 마지막 결과만 얻을 수 있는 다른 명령으로 파이프하는 방법을 찾으려고 합니다.

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

파일 은 스크립트가 새 패키지 버전 번호와 ID를 추가하는 sfdx-project.json중첩된 JSON이 있는 json 파일입니다 .packageAliases

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

아이디어는 특정 패키지 이름에 대한 모든 패키지 별칭을 선택하고 사용해야 할 마지막 별칭을 그대로 두는 것입니다.

select내가 얻은 결과를 파이프로 연결하려고 하면 last다음 오류가 발생합니다. Cannot index object with number

select() 명령이 배열을 반환한다고 생각했지만(중간 결과를 에코할 때도 이 배열을 얻습니다)

last() 명령을 다른 곳에 넣으면 배열에 몇 개의 null 값만 남게 되지만 실제로 필요한 단일 값은 여전히 ​​얻지 못합니다.

배열에서 마지막 항목을 가져오려면 명령을 어떻게 변경해야 합니까 select()?

답변1

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

전체 명령을 last()로 래핑하면 전체 파이프라인 체인의 결과가 되기 때문에 트릭이 수행됩니다.

관련 정보