lines=""
for (( i=0; i < $lineNum; i++ )); do
read -t 1 -u $redis_socket line
lines+=$line
done
echo "$lines"
例如,假设套接字中的每一行都是aaa
,bbbb
,ccccc
我希望最终输出类似于aaabbbbccccc
。
但是我得到了aaabc
,我在这里做错了吗?
我在其他问题上尝试了很多替代方案,但没有什么可行的。
示例输出行如下所示
redis_version:3.0.7
redis_git_sha1:00000000
redis_git_dirty:0
slave0:ip=127.0.0.1,port=6379,state=online,offset=549974442474,lag=0
....
db1:keys=4190,expires=0,avg_ttl=0
,最终输出为
db1:keys=4190,expires=0,avg_ttl=0tl=1200913396e,offset=549974442474,lag=0
答案 0 :(得分:1)
正如评论中所见,问题在于你得到的输出回车。
由于$line
包含一个回车符,给定一个值,说lines+=$line
结果是$lines
和$line
的交集,而不是$line
1}}附加到$lines
。
line lines
XXX XXX
YYYY XXXY
ZZ XXXY
举例:
line -> redis_git_dirty:0
lines -> redis_git_dirty:0
line -> slave0:ip=127.0.0.1,port=6379,state=online,offset=549974442474,lag=0
lines -> redis_git_dirty:0.1,port=6379,state=online,offset=549974442474,lag=0
# ^^^^^^^^^^^^^^^^^
# intersection
line -> db1:keys=4190,expires=0,avg_ttl=0
lines -> db1:keys=4190,expires=0,avg_ttl=0te=online,offset=549974442474,lag=0
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# intersection
等
所以解决办法是事先删除这个回车符:
line=$(echo "line" | tr -d '\r')
lines+="$line"