내가 할 때 :
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
조건부로 사용됩니다. 이 경우 조건을 제거하면 됩니다.