小编lis*_*4ok的帖子

将参数传递给jq过滤器

这是我的config.json:

{
    "env": "dev",
    "dev": {
        "projects" : {
            "prj1": {
                "dependencies": {},
                "description": ""
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的bash命令:

PRJNAME='prj1'

echo $PRJNAME

jq --arg v "$PRJNAME" '.dev.projects."$v"' config.json 
jq '.dev.projects.prj1' config.json 
Run Code Online (Sandbox Code Playgroud)

输出:

prj1
null
{
  "dependencies": {},
  "description": ""
}
Run Code Online (Sandbox Code Playgroud)

所以$ PRJNAME是prj1,但第一次调用只输出null.

有人能帮我吗?

bash json parameter-passing jq

27
推荐指数
4
解决办法
3万
查看次数

JQ用“-”解析字符串

我的JSON:

{
    "projects": {
        "api-client": {
            "status": "false",
            "when": "19-01-2016 12:54:47"
        },
        "api-admin": {
            "status": "false",
            "when": "19-01-2016 12:54:47"
        },
        "myweb": {
            "status": "false",
            "when": "19-01-2016 12:54:47"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

脚本:

JQ=$(which jq)
CACHE='cache.json'
PROJECT=("api-client" "api-admin" "myweb")
for PROJECT in ${PROJECTS[*]}; do
    if [[ $(${JQ} -r ".projects.\"${PROJECT}\"" ${CACHE}) != null ]]; then
        if [[ $(${JQ} -r ".projects.\"${PROJECT}\".status" ${CACHE}) == true ]]; then
            local PROJECTDATE=$(${JQ} -r ".projects.\"${PROJECT}\".when" ${CACHE})
            local STATUS="${COLOR_GREEN}Installed${CLEAR} on ${COLOR_YELLOW}${PROJECTDATE}${CLEAR}"
        else
            local STATUS="${COLOR_RED}Not installed${CLEAR}"
        fi
        echo -e "${CLEAR}    - …
Run Code Online (Sandbox Code Playgroud)

shell json jq

2
推荐指数
1
解决办法
3765
查看次数

标签 统计

jq ×2

json ×2

bash ×1

parameter-passing ×1

shell ×1