文章目录
- printf
- printf格式
- 常用的转义字符
- echo
- echo打印的格式
- echo打印的三种方式
- echo支持的转义字符
- 关于打印叹号(!)
- 彩色输出
printf
printf格式
printf “格式化字符串” 变量
printf的使用方法与C语言一样,并且不需要括号和逗号进行分隔:
printf "%-10s %-5d\n" hello_world
打印结果:
hello_world
打印字符串时,如果字符串中间有空格,或有特殊符号,那么需要将其用双引号括起来:
printf "%-10s %-5d\n" "hello world"
打印结果:
hello world
常用的转义字符
转义字符 | 说明 |
---|---|
\n | 换行符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\a | 警告字符 |
\b | 退格符 |
\f | 进纸符 |
\r | 回车 |
? | 连续书写多个问号时使用 |
’ | 用于表示字符’ |
" | 用于表示字符“ |
\\ | 用于表示字符\ |
\ddd | 八进制数打印,其中ddd表示打印一个1~3个的八进制数字 |
\xdd | 十六进制数打印,其中dd表示1~2个十六进制数字 |
echo
与printf不同的是,echo每次打印会自动换行
echo打印的格式
echo [可加选项] [打印内容]
选项 | 说明 |
---|---|
-n | 禁止自动换行 |
-e | 允许使用转义字符打印 |
-E | 禁止用\ 对字符进行转义 |
1)-n选项
[wjj@learning study]$ echo -n Hello World!
Hello World![wjj@learning study]$
因为取消了自动换行功能,因此打印结果与下一条命令在同一行。
2)-e选项
[wjj@learning study]$ echo -e "zhangsan\nlisi\nwangwu"
zhangsan
lisi
wangwu
-e选项允许echo使用上述转义符号进行打印。
3)-E选项
[wjj@learning study]$ echo -E "zhangsan\nlisi\nwangwu"
zhangsan\nlisi\nwangwu
-E选项取消了\
的转义功能。
echo打印的三种方式
1)打印不加引号的内容
格式:echo 字符串
echo hello world
2)打印双引号的内容
格式:echo "字符串"
echo "hello world"
3)打印单引号中的内容
格式echo ‘字符串’
echo 'hello world'
三种打印方式的区别
- 不加引号的方式无法打印
;
,因为;
在shell中作为命令分隔符 - 双引号的方式支持解析特殊字符,如果不想解析特殊字符,需要加入转义字符
\
- 单引号的方式不支持一切特殊符号,所见即所得
echo支持的转义字符
echo支持的转义字符大多数与printf函数相同,部分有所区别,需要与前文表格进行对照。
转义字符 | 说明 | 备注(是否与printf函数相同) |
---|---|---|
\a | 警告字符 | √ |
\b | 退格符 | √ |
\c | 抑制打印字符(不打印\c后面的字符) | × |
\e | 转义字符(示例见下文彩色打印) | × |
\f | 近纸符(换行尾对齐) | √ |
\n | 换行符 | √ |
\r | 回车 | √ |
\t | 水平制表符 | √ |
\v | 垂直制表符 | √ |
\\ | 字符‘\’ | √ |
\0ddd | 八进制数打印,其中ddd表示打印一个1~3个的八进制数字(与printf略有不同) | × |
\xdd | 十六进制数打印,其中dd表示1~2个十六进制数字 | √ |
关于打印叹号(!)
shell中
!
作为一个特殊符号,对其进行打印时需要注意以下几个问题
1)printf和echo对!
进行转义打印
[wjj@learning ~]$ printf "Hello World\!\n"
Hello World\!
[wjj@learning ~]$ echo "Hello World\!"
Hello World\!
对!
进行转义后再打印,打印不会报错,但是打印会出现\
,这种情况只会在命令行输入命令时出现,使用脚本打印则能将!
正常进行转义。
2)printf格式化输出
[wjj@learning ~]$ printf "%-s %-s %c\n" Hello World !
Hello World !
通过格式化输出,把!
当作一个变量进行打印,打印结果正确。
3)echo不加引号打印
[wjj@learning ~]$ echo Hello World !
Hello World !
echo不加引号可以正确输出结果,但是该方法直接打印不利于编写脚本,故不推荐。
4)echo用‘’
打印
[wjj@learning ~]$ echo 'Hello World!'
Hello World!
因为单引号的方式不支持一切特殊符号,所见即所得,所以可以正常打印,推荐使用该方法
彩色输出
通用格式:echo -e "\e[am 文本 \e[am"
其中a是对应的颜色ASCII码值,用来控制文本颜色
、背景颜色
以及文本样式
。
文本颜色
主要包括:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
背景颜色
主要包括:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
文本样式
主要包括:重置0,设置高亮=1,下划线=4,闪烁显示=5,反转显示=7,消隐=8,
示例1:打印红色字体:
echo -e "\e[31m red text \e[0m"
其中:
- “\e[31m \e[0m”是标准格式
- \e[31m是一个转义字符,31对应文本的红色
- \e[0m是将文本重置,如果不重置将一直保持该格式
效果如下:
示例2:打印红色字体,黄色背景
echo -e "\e[43;31m red text \e[0m"
其中:
- 43;31m分别对应背景颜色黄色和字体颜色黑色,二者前后的顺序并不固定,最终系统都是根据其ASCII码对应的值进行操作。
效果如下:
示例3:打印红色字体,黄色背景,加下划线
echo -e "\e[4;43;31m red text \e[0m"
- 通过不断的加入控制选项,让文本显示的更加好看
效果如下: