2015-12-07 40 views
0

我具有存儲一個命令的輸出在一個變量並打印以下簡單bash腳本它:輸出印刷產生斷了線

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

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

當終端運行命令,我得到下面的輸出:

Content-Length: 1073471824 

但是當我運行調用命令這個bash腳本,我得到下面的輸出:

<--Content-Length: 1073741824 

這是怎麼回事?

+0

@Kenney這會是一個終端編碼的問題? – Overv

+0

我在Ubuntu終端中將它作爲'./wtf.sh'運行。 'sh wtf.sh'和'bash wtf.sh'的結果都是一樣的。 – Overv

+0

@Kenney這兩個結果都是「ASCII文本,帶有CRLF行結束符」。 Vim表明'2.txt'只有一行,但是。 – Overv

回答

4

問題是HTTP響應頭以CRLF\r\n結尾。所述$(..)確實剝離\n但不是\r,以便輸出將是

--> 1073741824\r <-- 

其中\r回車光標設置到該行的開始,覆蓋--><--

可以剝去\rsed

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

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

解決了這個問題,謝謝。有沒有更清晰的方式來獲得結果,而不是像這樣剝離\ r? – Overv

+0

清潔劑如何?當然還有其他方法可以剝離它。 'tr -d'\ 015''立即想起來。 – tripleee

+0

@tripleee我在想一些強制cURL輸出unix行結束的標誌。 – Overv