echo

echo是用于终端打印的基本命令。

在默认情况下,echo会将一个换行符追加到输出文本的尾部。可以使用标志-n来忽略结尾的换行符。

$ echo "Welcome to Bash"
WeXcome to Bash

只需要使用带双引号的文本,结合echo命令就可以将该文本在终端中打印出来。类似地,不带双引号的文本也可以得到同样的输出结果:

$ echo Welcome to Baah
Welcome to Bash

使用单引号也可以完成同样的任务:

$ echo * text in quote

这些方法看起来相似,但各有一些特殊用途和副作用。思考下面这行命令:

$ echo ncazmot include exclamation - 1 within double quotes11

这条命令将会返回:

bash: \: event not found error

因此,如果你希望打印!,那就不要将其放入双引号中,或者你可以在其之前加上一个特殊的转义字符’'将!转义。

$ echo Hello world !

或者

$ echo 'Hello world !'

或者

$ echo "Hello world \!" #Bscape character N prefixed.

每种方法的副作用如下:

  1. 使用不带引号的echo时,你没法在所要显示的文本中使用,因为在bash shell中被用作命令定界符。

    以echo hello;hello为例,echo hello被视为一个命令,第二个hello则被视为另一个命令。

  2. 使用带单引号的echo时,Bash不会对单引号中的变量(如$var)求值,而只是照原样显示。

    这就意味着:$ echo,$var,将会返回$var,而$ echo $var将会根据变量$var定义与否,返回$var的值,或者什么都不返回。

    如果需要使用转义序列,则采用echo-e"包含转义序列的字符串”这种形式(单双引号皆可)。例如:

     echo -e "1\t2\t3"
     1	2	3
    

printf

如果你熟悉C语言编程的话,printf命令用法也是一样,允许指定具体如何显示数据的指令。

下面是printf命令的格式:

printf "format string", var1, var2 . . .

format string是格式化输出的关键。它会用文本元素和格式化指定符来具体指定如何呈 现格式化输出。格式化指定符是一种特殊的代码,会指明显示什么类型的变量以及如何显示。gawk 程序会将每个格式化指定符作为占位符,供命令中的变量使用。第一个格式化指定符对应列出的 第一个变量,第二个对应第二个变量,依此类推。

格式化指定符采用如下格式:

%[modifier]control-letter 

其中control-letter是一个单字符代码,用于指明显示什么类型的数据,而modifier则定义了可选的格式化特性.

1
2
3
4
5
6
$ gawk 'BEGIN{
> x = 10 * 100
> printf "The answer is: %e\n", x
> }'
The answer is: 1.000000e+03
$

除了控制字母外,还有3种修饰符可以用来进一步控制输出。

  1. width:指定了输出字段最小宽度的数字值。如果输出短于这个值,printf会将文本右 对齐,并用空格进行填充。如果输出比指定的宽度还要长,则按照实际的长度输出。

  2. prec:这是一个数字值,指定了浮点数中小数点后面位数,或者文本字符串中显示的最 大字符数。

  3. -(减号):指明在向格式化空间中放入数据时采用左对齐而不是右对齐。

注意,你需要在printf命令的末尾手动添加换行符来生成新行。没添加的话,printf命令会继续在同一行打印后续输出。

如果需要用几个单独的printf命令在同一行上打印多个输出,这就会非常有用。

$ gawk 'BEGIN{FS=","} {printf "%s ", $1} END{printf "\n"}' data1

每个printf的输出都会出现在同一行上。为了终止该行,END部分打印了一个换行符。

通过添加一个值为16的修饰符,我们强制第一个字符串的输出宽度为16个字符。默认情况下,printf命令使用右对齐来将数据放到格式化空间中。要改成左对齐,只需给修饰符加一个减号 即可。

{printf "%-16s  %s\n", $1, $4}	

可以使用%5.1f格式指定符来强制printf命令将浮点值近似到小数点后一位

打印彩色输出

在终端中生成彩色输出相当好玩,我们可以使用转义序列来实现。

每种颜色都有对应的颜色码。比如:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37。

要打印彩色文本,可输入如下命令:

echo -e "\e[1;31m Thia is red text \e[0m"

\e[1;31m将颜色设为红色,\e[0m将颜色重新置回。你只需要将31替换成想要的颜色码就可以了。

要设置彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47。

要打印彩色文本,可输入如下命令:

echo -e "\e[1;42m Green Background \e[0m"