現在のスクリプトの結果を、ここで選択した配列の最後の結果のみを取得できる他のコマンドにパイプする方法を見つけたいと思います。
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()でラップすると、パイプラインチェーン全体の結果になるため、トリックが実行されます。