0.前言
每次使用scp或者wget时就比较好奇,为什么可以动态的显示进度,而不是每个进度状态打印一行,偶然间重新留意到echo 中的特殊字符 - 退格符,才豁然开朗,所以写了一个脚本来验证自己的想法。想实现上面的效果其实很简单,只需要如下几行代码:
1.echo介绍
echo用来显示一行文本信息。echo的语法如下:
echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION
通过上述的格式实现字符串的标准输出,其中常用的参数有如下三个:
-n | do not output the trailing newline |
-e | enable interpretation of backslash escapes |
-E | disable interpretation of backslash escapes (default) |
从上表中可以看出,默认情况下echo都是带-E参数的,而为了能够实现上面的效果,需要使用特殊字符,想要使特殊字符生效,则需要添加-e参数,就如上面的代码写的那样。
2.特殊字符
\\ | backslash |
\a | alert (BEL) |
\b | backspace |
\c | produce no further output |
\e | escape |
\f | form feed |
\n | new line |
\r | carriage return |
\t | horizontal tab |
\v | vertical tab |
上述程序的主角就是\b,用来表示退格。在上一次显示完成后,sleep一段时间,然后退格更新数据,这样从视觉上就达到了动态显示的效果。
此外,上述代码中末尾的\c表示echo的文本末尾不加换行符(\n),使用第一节中的-n参数也能达到类似的效果。这里就不展示了。
3.参考:
man echo