我想编写一个脚本来输出我选择的句子。我希望它们出现在屏幕中央:输出第一个句子,然后让第二个句子出现在第一个句子上方。这是我的代码:
COLUMNS=$(tput cols)
printf "%*s\n" $((($COLUMNS)/2)) "Hey, welcome to my script!" "%\r"
sleep 2
printf "%*s" $((($COLUMNS)/2)) "This is a new line!"
我的目的是用第二行覆盖第一行,就像telnet towel.blinkenlights.nl
在特定星球大战版本的开头一样。我通过阅读另一个问题设法让它们出现在中心,但我发现不可能让第二行从第一行的同一行开始。有什么线索吗?
答案1
\n
问题是,第一个 中有一个printf
。这会使光标移动到下一行,因此当您打印新文本时,它不在同一行上以覆盖旧文本。如果您删除它,您应该会很好:
COLUMNS=$(tput cols)
printf "%*s\r" $((COLUMNS/2)) "Hey, welcome to my script!"
sleep 2
printf "%*s" $((COLUMNS/2)) "This is a new line!"
printf "\n"
我修正了你关于\r
错误的正确观察,并稍微简化了数学。然后我添加了最后一个\n
,以便将提示放在最后的一行上