我正在练习带有选项\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
(并且还经常破坏二进制文件......)。