打印后覆盖 unix shell 中的行

g4u*_*r4v 4 shell ksh printf

在unix shell中打印后如何修改一行。我们可以删除该行并使用\r如下所示再次写入,但是如何覆盖现有行而不完全删除它并获得如下预期输出中的输出。

命令:

printf "12345";printf "\r67";
Run Code Online (Sandbox Code Playgroud)

输出:

67
Run Code Online (Sandbox Code Playgroud)

预期产出

67345
Run Code Online (Sandbox Code Playgroud)

gol*_*cks 7

正如评论中所讨论的,问题在于您离开光标的位置。例如:

goldilocks@home> echo -n 1234; echo -ne "\r56"
56goldilocks@home>
Run Code Online (Sandbox Code Playgroud)

发生的事情是第一个echo写了“1234”,然后第二个回声回到行首并打印“56”并退出。光标停留在 6 之后,接下来发生的是 shell 打印命令提示符,覆盖“34”。如果您在第二个 echo 中包含换行符(或删除-n开关,以便 echo 自动打印换行符),您将获得:

goldilocks@home> echo -n 1234; echo -e "\r56"
5634
goldilocks@home>
Run Code Online (Sandbox Code Playgroud)

光标向下移动一行,留下“34”。

  • 你的用户名甚至是金发女郎吗?太好笑了。 (2认同)