在bash脚本中打印grep的输出会产生断开的字符串

在bash脚本中打印grep的输出会产生断开的字符串,bash,shell,curl,Bash,Shell,Curl,我有以下简单的bash脚本,它将命令的输出存储在变量中并打印出来: size=$(curl -sI "http://speedtest.reliableservers.com/1GBtest.bin" | grep -i "length") echo "--> ${size} <--" 但当我运行调用该命令的bash脚本时,我得到以下输出: Content-Length: 1073471824 <--Content-Length: 1073741824 问题在于HTT

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

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

echo "--> ${size} <--"
但当我运行调用该命令的bash脚本时,我得到以下输出:

Content-Length: 1073471824
 <--Content-Length: 1073741824

问题在于HTTP响应头以
CRLF
\r\n
结尾。
$(..)
会剥离
\n
,但不会剥离
\r
,因此输出将

--> 1073741824\r <--

问题是HTTP响应头以
CRLF
\r\n
结尾。
$(..)
会剥离
\n
,但不会剥离
\r
,因此输出将

--> 1073741824\r <--

@Kenney这可能是终端编码问题吗?我在Ubuntu终端中以
/wtf.sh
的形式运行它。
sh wtf.sh
bash wtf.sh
的结果都是一样的。@Kenney都给我带来了“ASCII文本,带CRLF行终止符”。然而,Vim显示
2.txt
只有一行。
grep-i“length.[0-9]”
或使用
dos2unix
@Kenney这可能是终端编码问题吗?我在Ubuntu终端中以
/wtf.sh
的形式运行它。
sh wtf.sh
bash wtf.sh
的结果都是一样的。@Kenney都给我带来了“ASCII文本,带CRLF行终止符”。然而,Vim显示
2.txt
只有一行。
grep-i“length.[0-9]”
或使用
dos2unix
。这解决了问题,谢谢。没有比像这样剥离\r更干净的方法来获得结果吗?如何更干净?当然,还有其他方法可以去除它
tr-d'\015'
立刻浮现在我的脑海中。@tripleee我正在考虑一些强制cURL输出unix行结尾的标志。我认为没有,但是
grep-io'^content length:[0-9]*'
不会捕获,因此不会首先打印回车。@Overv根据您实际需要,
--write out
选项可能很有用。这解决了问题,谢谢。没有比像这样剥离\r更干净的方法来获得结果吗?如何更干净?当然,还有其他方法可以去除它
tr-d'\015'
立刻浮现在我的脑海中。@tripleee我正在考虑一些强制cURL输出unix行结尾的标志。我认为没有,但是
grep-io'^content length:[0-9]*'
不会捕获,因此不会首先打印回车。@Overv根据您实际需要,
--write out
选项可能有用。