[shell]curl结果获取http header的问题

前端之家收集整理的这篇文章主要介绍了[shell]curl结果获取http header的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在通过curl请求http获取response header时, 发现字符串拼接一个问题。
比如以下程序:

  1. hadoop@1:~$ ct=$(curl -s -I http://www.baidu.com | grep Content-Type | awk '{print $2}')
  2. hadoop@1:~$ echo $ct
  3. text/html
  4. hadoop@1:~$ echo $ct"_postfix"
  5. _postfixl

最后一行输出竟然是: _postfixl,而不是期待的text/html_postfix
细看结果应该是_postfix 直接覆盖了text/html 前面的内容
http header是以\r\n 作为行分割符,与echo机制有什么冲突?
原因未解, 不过找到这样一种替代方法(如test.sh):

  1. shopt -s extglob # 识别正则,用于后面去掉空格
  2.  
  3. function grepCT()
  4. {
  5. while IFS=':' read key value; do
  6. # 去掉"value"内的空格
  7. value=${value##+([[:space:]])}; value=${value%%+([[:space:]])}
  8. case "$key" in
  9. Server) SERVER="$value"
  10. ;;
  11. Content-Type) CT="$value"
  12. ;;
  13. HTTP*) read PROTO STATUS MSG <<< "$key{$value:+:$value}"
  14. ;;
  15. esac
  16. done < <(curl -sI $1)
  17. echo $CT
  18. }
  19. ct=$(grepCT http://www.baidu.com)
  20. echo $ct"_postfix"

执行shell文件:

  1. hadoop@1:~$ bash test.sh
  2. text/html_postfix

猜你在找的Bash相关文章