来自curl的IF ELSE字符串比较

来自curl的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")

无论如何,您可能想在此处使用-Fwith grep,因为该字符串是固定字符串而不是正则表达式:

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

您的脚本还使用else条件。要么使用只是 elseelif有条件地使用。在这种情况下,只需删除该条件即可。

相关内容