나는 여기서 간단한 것을 놓치고 있다고 생각하지만 그게 전부입니다.
이것은 명령줄에서 잘 작동하며 원하는 출력을 제공합니다.
curl -X GET \
-H "X-Auth-Email: REDACTED" \
-H "X-Auth-Key: REDACTED" \
"https://api.cloudflare.com/client/v4/zones/aa5ac150d414359642d85f1aa434e5db/filters" | jq -r '.result[0] .id'
그러나 bash 스크립트에서 사용하려고 하면 전혀 출력이 나오지 않습니다.
FWRID="$(curl -X GET \
-H "X-Auth-Email: REDACTED" \
-H "X-Auth-Key: REDACTED" \
"https://api.cloudflare.com/client/v4/zones/aa5ac150d414359642d85f1aa434e5db/filters")" | jq -r '.result[0] .id'
echo "$FWRID"
어떤 도움이라도 대단히 감사하겠습니다.
답변1
두 번째 명령에서는 에 파이프하기 전에 명령 대체를 종료합니다 jq
. 이 호출은 jq
원하는 값을 구문 분석하므로 명령 대체의 일부가 되어야 합니다.
FWRID=$(
curl -X GET \
-H 'X-Auth-Email: REDACTED' \
-H 'X-Auth-Key: REDACTED' \
'https://api.cloudflare.com/client/v4/zones/aaxxx/filters' |
jq -r '.result[0] .id'
)
원래 명령에서는 jq
명령 대체 외부에서 jq
변수 할당의 출력을 읽고 FWID
그로부터 일부 결과가 생성됩니다. 할당은 출력을 생성하지 않으므로 전혀 흥미로운 작업을 수행하지 않습니다.
또한 원래 명령의 할당은 파이프라인의 일부이므로 하위 셸에서 실행되므로 $FWID
이후 호출에서는 값이 비어 있거나 최소한 변경되지 않습니다 echo
.