当我做:
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
with grep
,因为该字符串是固定字符串而不是正则表达式:
VAR_A=$(curl -Is --head "$URL_CURL_CHECK" | grep -F -o "HTTP/1.1 200 OK")
您的脚本还使用else
条件。要么使用只是 else
或elif
有条件地使用。在这种情况下,只需删除该条件即可。