【问题标题】:Explain this shell output解释这个shell输出
【发布时间】:2016-11-18 12:52:45
【问题描述】:

为什么输出(实际上是最后一行)是:

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

【问题讨论】:

  • 看起来您的脚本或redis-cli 工具使用了 DOS 行终止符。有关详细信息,请参阅bash tag wiki 上的第 1 步。

标签: bash shell scripting


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多