小编典典

将bash变量传递给jq select

json

我已经编写了一个脚本来从中检索某些值file.json。如果将值提供给jq
select,它将起作用,但是该变量似乎不起作用(或者我不知道如何使用它)。

#!/bin/sh

#this works ***
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="myemail@hotmail.com") | .id')
echo "$projectID"

EMAILID=myemail@hotmail.com

#this does not work *** no value is printed
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="$EMAILID") | .id')
echo "$projectID"

阅读 301

收藏
2020-07-27

共1个答案

小编典典

还考虑将shell变量(EMAILID)作为jq变量传递(为便于说明,此处也称为EMAILID):

   projectID=$(cat file.json | 
     jq -r --arg EMAILID "$EMAILID" '
        .resource[]
        | select(.username==$EMAILID) 
        | .id')

后记

作为记录,另一种可能性是使用jq env函数访问环境变量。例如,考虑以下bash命令序列:

EMAILID=foo@bar.com  # not exported
EMAILID="$EMAILID" jq -n 'env.EMAILID'

输出是一个JSON字符串:

"foo@bar.com"
2020-07-27