これが私の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
のみが出力されます。
誰かが私を助けることができますか?
この例のjqプログラム.dev.projects."$v"
は、"$v"
という名前のキーを文字通り見つけようとします。代わりに次を試してください。
jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json
あなたも使用できます--argjson
jsonを作成するとき。
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
上記のコメントで尋ねられたように、複数の引数を渡す方法があります。もっとエレガントな方法があるかもしれませんが、うまくいきます。
jq --arg key1 $k1 --arg key2 $k2 --arg key3 $k3 --arg key4 $k4 '.[$key1] | .[$key2] | .[$key3] | .[$key4] '
jq --arg key $k ' if key != "" then .[$key] else . end'
jq --arg key $k ' if type == "array" then .[$key |tonumber] else .[$key] end'
もちろんこれらを組み合わせることができます!