bash 변수를 jq select에 전달
에서 특정 값을 검색하는 스크립트를 작성했습니다 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"
또한 쉘 변수 (EMAILID)를 jq 변수로 전달하는 것을 고려하십시오 (예시를 위해 여기에서도 EMAILID).
projectID=$(cat file.json |
jq -r --arg EMAILID "$EMAILID" '
.resource[]
| select(.username==$EMAILID)
| .id')
추신
기록을 위해 또 다른 가능성은 env
환경 변수에 액세스 하기 위해 jq의 함수 를 사용하는 것 입니다. 예를 들어 다음 bash 명령 시퀀스를 고려하십시오.
EMAILID=foo@bar.com # not exported
EMAILID="$EMAILID" jq -n 'env.EMAILID'
출력은 JSON 문자열입니다.
"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"
)
당신이 넣을 경우 작은 따옴표를 주요 문자열을 구분하기 위해, 쉘은 소요 $EMAILID
그대로.
"큰 따옴표"공간 / 메타 문자 및 포함하는 모든 문자 그대로 모든 확장 : "$var"
, "$(command "$var")"
, "${array[@]}"
, "a & b"
. 사용 'single quotes'
코드 나 문자에 대한 $'s: 'Costs $5 US'
, ssh host 'echo "$HOSTNAME"'
. 참조
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words을
이를 수행하는 또 다른 방법은 jq "--arg"플래그를 사용하는 것입니다. 원래 예 사용 :
#!/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"
이 솔루션을 찾은 곳은 https://github.com/stedolan/jq/issues/626입니다.
회신 할 시간이 조금 늦다는 것을 알고 있습니다. 죄송합니다. 그러나 그것은 나를 위해 작동합니다.
export K8S_public_load_balancer_url="$(kubectl get services -n ${TENANT}-production -o wide | grep "ingress-nginx-internal$" | awk '{print $4}')"
이제 변수의 내용을 가져 와서 jq에 전달할 수 있습니다.
export TF_VAR_public_load_balancer_url="$(aws elbv2 describe-load-balancers --region eu-west-1 | jq -r '.LoadBalancers[] | select (.DNSName == "'$K8S_public_load_balancer_url'") | .LoadBalancerArn')"
제 경우에는 변수 값에 액세스하기 위해 큰 따옴표와 따옴표를 사용해야했습니다.
건배.
참고URL : https://stackoverflow.com/questions/40027395/passing-bash-variable-to-jq-select
'Program Tip' 카테고리의 다른 글
원자에서`git commit`과`git push`를 어떻게 실행할 수 있습니까? (0) | 2020.11.04 |
---|---|
단 하나의 명령문으로 Python 목록에서 여러 항목 제거 (0) | 2020.11.04 |
Visual Studio Code에서 도구 설명 힌트 비활성화 (0) | 2020.11.04 |
MySQL의 NULL (성능 및 스토리지) (0) | 2020.11.04 |
'큰 데이터베이스'란 무엇입니까? (0) | 2020.11.04 |