컬의 IF ELSE 문자열 비교

컬의 IF ELSE 문자열 비교

내가 할 때 :

URL_CURL_CHECK="https://github.com/"
VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep "HTTP/1.1 200 OK")
VAR_B="HTTP/1.1 200 OK"

echo
if [ "$VAR_A" != "$VAR_B" ]; then
    echo "Not equal ..."
else [ "$VAR_A" = "$VAR_B" ]
    echo "It's a match"
fi

echo
echo "Validate VARs: "
echo "$VAR_A"
echo "$VAR_B"

출력은 다음과 같습니다.

Not equal ...

Validate VARs:
HTTP/1.1 200 OK
HTTP/1.1 200 OK

VAR_A를 VAR_B와 비교할 때 항상 "같지 않음"인 이유를 이해할 수 없습니다.

답변1

in 값의 $VAR_A끝에는 후행(캐리지 리턴) 문자가 있어 문자열 비교가 실패합니다. \r이는 HTTP 헤더이고 HTTP 헤더의 줄 끝 표시는 다음과 같으므로 캐리지 리턴이 있습니다.RFC2616처럼 \r\n.

이 문제를 해결하는 한 가지 방법은 다음과 같습니다.

VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep "HTTP/1.1 200 OK" | tr -d '\r')

tr -d '\r'모든 캐리지 리턴이 제거됩니다.

또 다른 옵션은 grep일치하는 텍스트(정확히는 string HTTP/1.1 200 OK)를 반환하는 것입니다.

VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep -o "HTTP/1.1 200 OK")

어쨌든 문자열은 정규식이 아닌 고정 문자열이므로 여기 -F에서 사용하고 싶을 것입니다.grep

VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep -F -o "HTTP/1.1 200 OK")

스크립트도 else조건을 사용합니다. 사용하거나오직 else또는 elif조건부로 사용됩니다. 이 경우 조건을 제거하면 됩니다.

관련 정보