我写了一个脚本,从file.json
检索某些值。如果我将值提供给jq select
,它将起作用,但是该变量似乎不起作用(或者我不知道如何使用它)。
#!/bin/sh
#this works ***
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="[email protected]") | .id')
echo "$projectID"
[email protected]
#this does not work *** no value is printed
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="$EMAILID") | .id')
echo "$projectID"
最佳答案
还考虑将shell变量(EMAILID)作为jq变量传递(为便于说明,此处也称为EMAILID):
projectID=$(jq -r --arg EMAILID "$EMAILID" '
.resource[]
| select(.username==$EMAILID)
| .id' file.json)
后记作为记录,另一种可能性是使用jq的
env
函数访问环境变量。例如,考虑以下bash命令序列:[email protected] # not exported
EMAILID="$EMAILID" jq -n 'env.EMAILID'
输出是一个JSON字符串:"[email protected]"
关于json - 将bash变量传递给jq,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40027395/