除了可读字符以外,printf还可以打印出八进制、十六进制的不可读字符。我们让printf打印出彩色文本:# printf '\x1b\x5b1;31;40m\tMerry Christmas\n'
让前景白后景黑:
# printf '\x1b\x5b1;31;40m\tMerry Christmas\n\x1b\x5b0;37;40m'
\x1b\x5b是十六进制码的1B和5B,表明要改变的是图形显示设置,1;31;40m改变文本属性,即前景色与背景色。
还可以把文本的位置与颜色结合起来:
# clear;printf '\x1b\x5b12;25f\x1b\x5b1;31;40m\tMerry Christmas\n\x1b\x5b0;37;40m'
在十六进制码
12;25f中, 12是行数, 25是列数。这些颜色改动的副作用是它们会在printf之后保留下来,恢复正常值:
# tput sgr0 或者:
# reset
与echo比较一下:
# echo -e '\033[1;32mCheers\033[0m'echo的颜色表示法遵循ANSI转义序列(ANSI escape sequences)的规则:
转义序列分为键与颜色两种,基本规则: 前面加上\033[ 或者 \e[ (这里的e大写或小写),前者是最早的,带e的是bash后来的版本加的。
颜色表示法:
一、以4开头的背景色;以3开头的前景色m
二、或者不要背景色:
0;前景色m
1;前景色m
0和1这两种有略微的差别。口诀:
0黑 1红 2绿 3棕 4蓝 5紫 6青 7灰