bash中复制粘贴的字符串不等于变量中的字符串
我试图比较变量中的字符串(从curl输出中获得)和IF语句中的双引号字符串,它们总是不相等的:bash中复制粘贴的字符串不等于变量中的字符串,bash,curl,Bash,Curl,我试图比较变量中的字符串(从curl输出中获得)和IF语句中的双引号字符串,它们总是不相等的: $ curlResult="$(curl -Isk https://stackoverflow.com | head -n 1)" $ echo $curlResult HTTP/2 200 $ if [ "$curlResult" != "HTTP/2 200" ] ; then echo 1; else echo 0; fi 1 我尝试的是: 通过字符串手动设置变量,然后它们变为相等,所以问
$ curlResult="$(curl -Isk https://stackoverflow.com | head -n 1)"
$ echo $curlResult
HTTP/2 200
$ if [ "$curlResult" != "HTTP/2 200" ] ; then echo 1; else echo 0; fi
1
我尝试的是:
$curlResult=“$(curl-Iskhttps://stackoverflow.com/questions/ask |头部-n 1 | xargs)“
我是bash的新手,所以可能丢失了一些重要的东西。这是因为字符串仍然包含未由echo打印的字符,例如,
echo
:
$curlResult=“$(curl-Iskhttps://stackoverflow.com |总目(n 1)
$printf“%s\n”$curlResult
HTTP/2
200
您可以执行以下操作:
$curlResult=“$(curl-Iskhttps://stackoverflow.com |标题-n 1 | tr-dc'[:print:][]')
$if[“$curlResult”!=“HTTP/2200”];然后回波1;否则为0;fi
0
注意,我在“HTTP/2200”之后留下了一个空格。如果它困扰您,您也可以使用
tr
删除它。如果您只对HTTP代码感兴趣,并且为了降低复杂性,您可以使用curl
命令的相应选项
HTTP_CODE=$(curl --silent --fail "https://example.com" --write-out "%{http_code}")
echo "${HTTP_CODE}"
if [[ "${HTTP_CODE}" -eq "200" ]]; then
echo "OK / 1"
else
echo "KO / 0"
fi
因为它只报告状态代码,所以它可以让事情变得更简单 卷曲结果以空格结尾,后跟
\r
。您可以从变量中删除它们,也可以在测试中忽略它们。
我会和你一起测试
if [[ "$curlResult" =~ "HTTP/2 200" ]]; then
echo "OK"
else
echo "NOK"
fi
每个标头由回车/换行符(CR/LF)对终止,但命令替换仅剥离LF,将CR保留为
curlResult
值的一部分
$ curlResult="$(curl -Isk https://stackoverflow.com | head -n 1)"
$ echo "${curlResult@Q}"
$'HTTP/2 200 \r'
您可以使用模式匹配来匹配行的非空白前缀
$ [[ $curlResult = "HTTP/2 200" ]] && echo success
$ [[ $curlResult = "HTTP/2 200"*([[:space:]]) ]] && echo success
success
*([[:space]])
匹配零个或多个空格字符,包括回车符。您的示例没有说明真正的问题:命令替换不会去除输出中的回车符。