jq 변수의 동등성 비교

jq 변수의 동등성 비교

컬 요청을 실행하고 jq를 통해 상태를 출력하는 bash 스크립트가 있습니다. 예상된 상태를 얻었지만 상태를 비교할 때 값이 동일하더라도(또는 그렇게 보이는 경우에도) 항상 "같지 않음" 값을 반환합니다.

스크립트는 다음과 같습니다.

status=( $(curl -H "Content-Type: application/json" -H "Authorization: Basic xxx==" -H "Cache-Control: no-cache" --data-binary "@$entry" $2/$3/_bulk_docs --silent | jq '.[0].status'))
echo $status
if [ "$status" = "409" ]
    then
      echo "Conflict"
    else
      echo "No Conflict"
fi

예상한 대로 콘솔에 409가 인쇄됩니다.

Cygwin이 설치된 Windows 10 PC에서 이것을 실행하고 있습니다.

추가 도움을 주셔서 감사합니다!

답변1

데이터 끝에 캐리지 리턴이 있습니다.

$ status=$'409\r'
$ echo "<<$status>>"
>>409

제거하려면 다음을 tonumber사용하십시오 jq.

status=$( curl ... | jq -r '.[0].status|tonumber' )

status또한 내가 아는 한 스크립트와 같이 배열 변수가 필요하지 않습니다.

관련 정보