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}
替换运算符。
我试图从命令中获取一个值到 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}
替换运算符。