Bash printf 值不显示或被截断

Bash printf value does not show up or is cut off

我试图从命令中获取一个值到 var
然后使用 printf.

打印出来

问题:我在 var 中得到了值,但在 printf 中它没有出现
或被切断。

信息:在我的脚本中我正在调用 redis-cli info memory
为了检查哪里出了问题,我尝试拨打 vmstat -s.

工作 vmstat 测试:

format="%-16s | %-16s"
container_name="some_name"
used_memory=$(vmstat -s | sed -n "s/^\(.*\) K used memory.*$//p")
row=$(printf "${format}" "${container_name}" "${used_memory}")
echo "${row}"

输出:some_name | 11841548

不工作的实际脚本:

format="%-50s | %-16s"
container_name="totally_secret_container_name_1"
used_memory=$(docker exec -it "${container_name}" redis-cli info memory | sed -n "s/^used_memory_human:\(.*\)$//p")
row=$(printf "${format}" "${container_name}" "${used_memory}")
echo "${row}"

输出: ecret_container_name_1 | 1.08M

奇怪的是我将格式设置为 format="%-50s | %-1s"
然后它起作用了——容器名称(左值)被正确打印。

这里发生了什么?
我该如何解决这个问题?

感谢您的宝贵时间!

您需要删除输出中导致返回到行首并覆盖的 \r 个字符。

used_memory=$(docker exec -it "${container_name}" redis-cli info memory | sed -n "s/^used_memory_human:\(.*\)$//p")
used_memory=${used_memory//$'\r'/}
row=$(printf "${format}" "${container_name}" "${used_memory}")

这使用 bash ${variable//old/new} 替换运算符。