2016-11-18 46 views
1

爲什麼地球上是輸出(真的,最後一行):解釋這個shell輸出

num=$(redis-cli info | grep instantaneous_ops_per_sec | cut -d : -f 2) 
echo num $num 
ts=$(date '+%s') 
echo ts $ts 
ns="$1.ops_per_sec" 
echo "$ns" 
echo "$ns $num" 
echo "$ns $num $ts" 

...這樣的:

num 0 
ts 1479439922 
foo.ops_per_sec 
foo.ops_per_sec 0 
1479439922_sec 0 
+0

看起來你的腳本或'redis的-cli'工具使用DOS行終止。有關更多信息,請參見[bash標籤wiki](http://stackoverflow.com/tags/bash/info)上的第1步。 –

回答

2

redis-cli輸出與CRLF結束,但只有LF被命令替換剝離。 CR輸出到終端時,將光標移動到該行的開頭。你不會注意到,當$num是一行輸出的最後一件事情,但在最後一種情況下,$ts的空間和值被寫在先前數據的基礎上。

解決這個問題的最簡單的方法是簡單地從num值修剪任何尾隨CR:

num=${num%$'\r'}