回车与 echo 命令

回车与 echo 命令

我正在练习带有选项\r(回车)的 echo 命令,如下所示。

echo -e "This is \r my college"

输出:

 my college

但是当我在前面添加一个词时,\r如下所示

echo -e "This is the \r my college"

然后它给我输出如下:

 my college the

另一个例子

echo -e "This is \r valid data"
 valid data

echo -e "This is not a \r valid data"
 valid data a

所以,我想知道这里回车的实际目的是什么?

答案1

\r只是一个“回车符”——没有别的。这意味着后面的内容\r将覆盖已打印内容的开头。

例如:

echo -e "1234\r56"

将显示:

5634

echo已打印1234然后返回到行的开头并打印56在 的顶部12

对于新线路,请尝试\n改为。也不需要空格。例如:

echo -e "This is\nmy college"

这将输出:

This is
my college

回车符对于这样的事情很有用:

#!/bin/sh
i=0
while [ $i -lt 3 ]
do
    echo -ne "\r"`date` #you should remove new line too
    sleep 1
    i=$(($i + 1))
done
exit

它将显示date在其自身的顶部,而不是在每次循环后创建一个新行。

答案2

关于它的作用,Tigger 有一个很好的答案\r。 Bourne shell 的另一个技巧(在其他 shell 中以不同的方式工作)是清除行尾,如下所示:

#/bin/sh -e
echo "this is a first line...\r\c"
...other code...
echo "another line\033[K\r\c"

如果没有\033[K(杀死行尾),您将得到:

another lineirst line...

\033[K光标位置到行尾的输出被清除,所以上面的结果是:

another line

这对于需要很长时间的脚本很实用,并且您想让用户知道您所在的位置(即您的脚本可能正在处理的路径,而下一个路径较短)。

笔记:作为旁注,我想指定是\n将光标发送到下一行的原因。在旧的 MS-DOS 控制台中,它只是在同一列中向下一行。这就是为什么在 MS-Windows 下您仍然需要写两个字符 ( \r\n)。尽管在大多数情况下,人们只是编写\n并且事情按预期工作,因为FILE有一个“文本模式”,它\r在每个之前插入一个\n(并且还经常破坏二进制文件......)。

相关内容