私がするとき:
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
条件付きで使用されます。この場合、条件を削除するだけです。