我编写了一个脚本来从file.json. 如果我向 jq 提供值,它会起作用select,但变量似乎不起作用(或者我不知道如何使用它)。
file.json
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"
还可以考虑将 shell 变量 (EMAILID) 作为 jq 变量传递(这里也是 EMAILID,为了便于说明):
projectID=$(jq -r --arg EMAILID "$EMAILID" ' .resource[] | select(.username==$EMAILID) | .id' file.json)
作为记录,另一种可能性是使用 jq 的env函数来访问环境变量。例如,考虑以下 bash 命令序列:
env
EMAILID=foo@bar.com # not exported EMAILID="$EMAILID" jq -n 'env.EMAILID'
输出是一个 JSON 字符串:
"foo@bar.com"