Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中复制粘贴的字符串不等于变量中的字符串_Bash_Curl - Fatal编程技术网

bash中复制粘贴的字符串不等于变量中的字符串

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 我尝试的是: 通过字符串手动设置变量,然后它们变为相等,所以问

我试图比较变量中的字符串(从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输出中

  • 在curl输出中添加了xargs以删除空格,但没有帮助:

    $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]])
    匹配零个或多个空格字符,包括回车符。

    您的示例没有说明真正的问题:命令替换不会去除输出中的回车符。