\ r和\ n不想一起工作

时间:2017-08-23 13:01:06

标签: bash printf

我非常喜欢echo -ne的简单性,但它对我不起作用,所以我决定使用" Pro" echo的版本 - " Printf"

我想制作一个实时显示重要信息的脚本 和循环clear命令刷新屏幕只是愚蠢和RAM消耗的东西。假设我有3个重要变量($ var_1 $ var_2 $ var_3),我希望在不同的行上显示并每秒刷新一次(变量是整数和文本)

#!/bin/bash/
while :
do
printf "%s\n\r %s\n\r %s\n\r" $var_1 $var_2 $var_3
sleep 1
done

输出

10.2324 #var_1
213 #var_2
120 #var_3
10.2324 #var_1
213 #...
150
10.2323
213
170

我尝试了多种不同的方式并在不同的论坛上搜索,但我找不到答案。 如何在3条不同的行上打印3个变量并每秒更新一次?

1 个答案:

答案 0 :(得分:1)

\r仅将光标移动到当前行的开头,而您需要光标移动向上三行。您需要使用不同的转义码。假设您的终端使用ANSI转义码,您可以使用

while :; do
  printf '%s\n' "$var_1" "$var_2" "$var_3"
  printf '\033[3A'  # move up 3 lines
  sleep 1
  ((var_1++, var_2++, var_3++))  # Simple changes to demonstrate
done

这会将每个变量打印在一个单独的行上,然后在睡觉前将光标移回到开头。