在bash脚本中打印grep的输出会产生断开的字符串
我有以下简单的bash脚本,它将命令的输出存储在变量中并打印出来:在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
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
选项可能有用。