Передача аргументов в jq-фильтр

Вот мой config.json:

{
    "env": "dev",
    "dev": {
        "projects" : {
            "prj1": {
                "dependencies": {},
                "description": ""
            }
        }
    }
}

Вот мои команды bash:

PRJNAME='prj1'

echo $PRJNAME

jq --arg v "$PRJNAME" '.dev.projects."$v"' config.json 
jq '.dev.projects.prj1' config.json 

Выход:

prj1
null
{
  "dependencies": {},
  "description": ""
}

Итак, $PRJNAME - prj1, но первый вызов выводит только null.

Может кто-нибудь мне помочь?

Ответы

Ответ 1

Программа jq .dev.projects."$v" в вашем примере будет буквально пытаться найти ключ с именем "$v". Вместо этого попробуйте следующее:

jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json 

Ответ 2

вы можете использовать слишком --argjson, когда вы делаете свой json.

--arg a v   set variable $a to value <v>;
--argjson a v   set variable $a to JSON value <v>;