在bash脚本中从grep打印输出会产生损坏的字符串

时间:2015-12-07 15:55:19

标签: bash shell curl

我有以下简单的bash脚本,它将命令的输出存储在变量中并打印出来:

size=$(curl -sI "http://speedtest.reliableservers.com/1GBtest.bin" | grep -i "length")

echo "--> ${size} <--"

在终端中运行命令时,我得到以下输出:

Content-Length: 1073471824

但是当我运行这个调用命令的bash脚本时,我得到以下输出:

 <--Content-Length: 1073741824

发生了什么事?

1 个答案:

答案 0 :(得分:5)

问题是HTTP响应标头以CRLF\r\n结尾。 $(..)会删除\n但不删除\r,以便输出

--> 1073741824\r <--

其中\r回车将光标设置为行的开头,用-->覆盖<--

您可以使用\r

删除sed
size=$(curl -sI "http://speedtest.reliableservers.com/1GBtest.bin" | grep -i "length" \
     | sed -e 's/\r//' )

echo "--> ${size} <--"