カールの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

この問題を解決する1つの方法は次のとおりです。

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

tr -d '\r'すべてのキャリッジリターンが削除されます。

別のオプションは、grep一致するテキスト(正確には文字列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条件付きで使用されます。この場合、条件を削除するだけです。

おすすめ記事