2016-11-18 3 views
1

Почему на земле является выходным (на самом деле, последняя линия):Объяснить этот вывод оболочки

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 терминаторы линии. Для получения дополнительной информации см. Шаг 1 в [bash tag wiki] (http://stackoverflow.com/tags/bash/info). –

ответ

2

Выход redis-cli заканчивается CRLF, но только LF лишается подстановкой команды. CR, при выходе на терминал, перемещает курсор в начало строки. Вы не заметили, что когда $num - последнее, что выводится на строке, но в последнем случае пространство и значение $ts написаны поверх предыдущих данных.

Самый простой способ исправить это просто обрезать любой косую CR от значения num:

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