#!/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" projectID=$(cat file.json | jq -r --arg EMAILID "$EMAILID" '.resource[] | select(.username==$EMAILID) | .id') EMAILID=foo@bar.com # not exported EMAILID="$EMAILID" jq -n 'env.EMAILID' "foo@bar.com" projectID=$( cat file.json | jq -r ".resource[] | select(.username=='$EMAILID') | .id" ) projectID=$(cat file.json | jq -r ".resource[] | select(.username=="$EMAILID") | .id") #!/bin/sh #this works *** projectID=$(cat file.json | jq -r '.resource[] | select(.username=="myemail@hotmail.com") | .id') echo "$projectID" EMAILID=myemail@hotmail.com # Use --arg to pass the variable to jq. This should work: projectID=$(cat file.json | jq --arg EMAILID $EMAILID -r '.resource[] | select(.username=="$EMAILID") | .id') echo "$projectID"