将 bash 变量传递给 jq [英] Passing bash variable to jq
本文介绍了将 bash 变量传递给 jq的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我编写了一个脚本来从 file.json
中检索某些值.如果我将值提供给 jq select
,它会起作用,但该变量似乎不起作用(或者我不知道如何使用它).
I have written a script to retrieve certain value from file.json
. It works if I provide the value to jq select
, but the variable doesn't seem to work (or I don't know how to use it).
#!/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"
推荐答案
考虑将 shell 变量 (EMAILID) 作为 jq 变量(这里也是 EMAILID,为了说明):
Consider also passing in the shell variable (EMAILID) as a jq variable (here also EMAILID, for the sake of illustration):
projectID=$(jq -r --arg EMAILID "$EMAILID" '
.resource[]
| select(.username==$EMAILID)
| .id' file.json)
后记
作为记录,另一种可能性是使用 jq 的 env
函数来访问环境变量.例如,请考虑以下 bash 命令序列:
Postscript
For the record, another possibility would be to use jq's env
function for accessing environment variables. For example, consider this sequence of bash commands:
EMAILID=foo@bar.com # not exported
EMAILID="$EMAILID" jq -n 'env.EMAILID'
输出是一个 JSON 字符串:
The output is a JSON string:
"foo@bar.com"
这篇关于将 bash 变量传递给 jq的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文