echo
echo 可能是我们接触 Linux 的第一个命令了。大家都比较熟悉,下面是几个简单的用法:
echo "www.zfl9.com www.baidu.com www.google.com"
,使用双引号扩起来;echo 'www.zfl9.com www.baidu.com www.google.com'
,使用单引号扩起来;echo www.zfl9.com www.baidu.com www.google.com
,也可以省略引号;
上面几个都是最常见的用法,谁都知道,但是下面这些命令,你可能就不一定熟悉了:
echo -n "www.zfl9.com"
,-n
选项,不在字符串末尾添加\n
换行符;echo -e "\twww.zfl9.com"
,-e
选项,开启字符串转义;echo -e "www.zfl9.com\n\c这些字符串不会被输出"
,\c
表示从这以后的字符串将不再输出;echo -e "\e[32mtrue\e[0m" "\e[35mfalse\e[0m"
,支持设定字符串颜色,true 为绿色,false 为红色;
转义字符
echo 默认是关闭转义功能的,使用选项-e
来显式开启它,下面是一些常见的转义字符:
转义字符 | 说明 |
---|---|
\a | 响铃(BEL),终端会响一声 |
\b | 退格(BS),将当前位置退回上一个字符 |
\r | 回车(CR),将当前位置移至本行开头 |
\n | 换行(LF),将当前位置移至下行开头 |
\f | 换页(FF),将当前位置移至下页开头 |
\t | 水平制表(HT) |
\v | 垂直制表(VT) |
\0 | 空字符(NULL) |
\0NNN | 八进制数字(1 ~ 3 位) |
\xHH | 十六进制数字(1 ~ 2 位) |
输出颜色
这个可能是最炫的功能了,我们一起来学习一下,如何让 echo 输出带有颜色的字符!
要想输出颜色,就必须打开转义功能,使用选项-e
;格式\e[控制码m字符串
,或\033[控制码m字符串
。
以\e[
或\033[
开头,控制码可以有多个,它们之间使用分号;
隔开,最后以字符m
结束。
为了不影响后续输出,需要使用\e[0m
来恢复默认格式,因此,一般形式为:\e[控制码m字符串\e[0m
。
这些控制码是由终端支持的,与具体语言无关;因此 C/C++、Java、Python 等语言也可以输出颜色。
编码 | 说明 |
---|---|
\e[0m | 恢复默认格式 |
\e[1m | 粗体/高亮显示 |
\e[2m | 模糊(部分终端支持) |
\e[3m | 斜体(部分终端支持) |
\e[4m | 下划线 |
\e[5m | 闪烁(慢) |
\e[6m | 闪烁(快)(部分终端支持) |
\e[7m | 交换背景色与前景色 |
\e[8m | 隐藏(什么也看不见)(部分终端支持) |
\e[3xm | 前景色,x 为颜色值(可参见下面的颜色表) |
\e[4xm | 背景色,x 为颜色值(可参见下面的颜色表) |
\e[nA | 光标上移 n 行 |
\e[nB | 光标下移 n 行 |
\e[nC | 光标右移 n 行 |
\e[nD | 光标左移 n 行 |
\e[y;xH | 调整光标位置,y 为纵向,x 为横向 |
\e[s | 保存光标位置 |
\e[u | 恢复光标位置 |
\e[?25l | 隐藏光标 |
\e[?25h | 显示光标 |
\e[2J | 清屏 |
\ec | 清屏(推荐) |
颜色表
编码 | 说明 |
---|---|
0 | 黑 |
1 | 红 |
2 | 绿 |
3 | 黄 |
4 | 蓝 |
5 | 紫 |
6 | 青 |
7 | 白 |
printf
除了 echo,还有一个常用的输出命令就是 printf,它支持格式化输出,和 C 语言的 printf() 风格类似。
语法:printf format-string arguments...
,和 printf() 一样,它不会自动在字符串末尾添加换行符。
格式参数,以%
开头,如果需要输出%
本身,需要使用%%
进行转义,常用的几个格式:
%c
,单个字符,如果传入的参数为多个字符,那么只提取第一个字符;%s
,字符串,使用%Ns
控制长度(默认右对齐),使用%-Ns
进行左对齐,下同;%d
,整数,使用%Nd
控制长度(默认右对齐),使用%0Nd
进行高位补零,使用%+d
显示正负号;%f
,浮点数,精确到小数点后六位(四舍五入),使用%.Nf
控制精确位数;%e
,浮点数,以科学计数法表示,指数部分以小写的 e 表示;%E
,浮点数,以科学计数法表示,指数部分以大写的 E 表示;%g
,浮点数,自动选择使用%f
、%e
格式;%G
,浮点数,自动选择使用%f
、%E
格式;
如果格式参数的个数与实际参数的个数不一致,那么format-string
将被重用;
如:printf "%s\n" "baidu" "google" "facebook"
,将输出三行,说明%s\n
被重用了。
printf 支持的转义字符和 echo 一样,并且还额外支持以下几个转义字符:
\NNN
八进制数字(0 ~ 3 位)\xHH
十六进制数字(1 ~ 2 位)\uHHHH
Unicode码\uHHHHHHHH
Unicode码。
echo
和 printf
都是 bash 的内置命令,因此从效率上讲没多大区别,根据自己的需要选择使用。