我试图比较变量中的字符串(从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
我尝试过的:
通过字符串手动设置变量,然后它们变得相等,因此问题出现在curl输出中。
将xargs添加到卷曲输出中以删除空格,但没有帮助:
$ curlResult="$(curl -Isk https://stackoverflow.com/questions/ask | head -n 1 | xargs)"
我是bash的新手,所以可能我丢失了一些重要的东西。
curlResult
以一个空格结尾,后跟r
。您可以从变量中删除它们,也可以在测试中忽略它们。我会用测试
if [[ "$curlResult" =~ "HTTP/2 200" ]]; then
echo "OK"
else
echo "NOK"
fi
这是因为字符串中仍然包含echo
:等未打印的字符
$ curlResult="$(curl -Isk https://stackoverflow.com | head -n 1)"
$ printf "%sn" $curlResult
HTTP/2
200
您可以执行以下操作:
$ curlResult="$(curl -Isk https://stackoverflow.com | head -n 1 | tr -dc '[[:print:]]')"
$ if [[ "$curlResult" != "HTTP/2 200 " ]] ; then echo 1; else echo 0; fi
0
请注意,我在"HTTP/2 200"之后留下了一个空白。如果它困扰你,你也可以用tr
删除它。
每个标头都由回车/换行(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]])
匹配零个或多个空白字符,包括回车。