解释这个shell输出

时间:2016-11-18 04:39:17

标签: bash shell scripting

为什么地球上的输出(真的,最后一行)是:

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

1 个答案:

答案 0 :(得分:2)

redis-cli的输出以CRLF结尾,但只有LF被命令替换剥离。 CR输出到终端时,将光标移动到行的开头。您没有注意到$num是一行中输出的最后一件事,但在最后一种情况下,$ts的空格和值会写在之前的数据之上。

解决此问题的最简单方法是简单地从num的值中删除任何尾随CR:

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