云网牛站
所在位置:首页 > Linux命令 > Bash printf命令:printf的语法、反斜杠转义字符、转换规格

Bash printf命令:printf的语法、反斜杠转义字符、转换规格

2020-06-01 11:49:21作者:张青稿源:云网牛站

通常,在编写bash脚本时,我们使用echo来打印到标准输出,echo是一个简单的命令,但功能有限。要更好地控制输出的格式,请使用printf命令(printf命令采用格式和参数,并输出格式化的文本)。printf命令格式化并打印其参数,类似于C printf()功能。

Bash printf命令:printf的语法、反斜杠转义字符、转换规格

 

printf命令

printf是Bash和其他流行的Shell(例如Zsh和Ksh)中内置的Shell,还有一个独立的/usr/bin/printf二进制文件,但shell内置版本优先,我们将介绍Bash内置的printf版本。

printf命令的语法如下:

printf [-v var] format [arguments]

参考:printf命令_Linux printf命令使用详解:格式化并输出结果

-v选项使printf不打印输出,而是将其分配给变量。

format是一个字符串,其中可能包含三种不同类型的对象:

1]、普通字符按原样简单地打印到输出中。

2]、反斜杠转义的字符,这些字符将被解释然后打印。

3]、描述格式的转换规范,并由格式字符串后的各个参数的值代替。

该命令接受任意数量的arguments,如果提供的arguments多于格式说明符,则format字符串将被重用以使用所有参数。如果提供的arguments少于format说明符,则将额外的数字格式说明符设置为零值,而字符串格式说明符设置为空字符串。

以下是在传递参数printf命令时要考虑的几点:

1]、在将参数传递给printf命令之前,shell将替换所有变量,通配符匹配和特殊字符。

2]、当使用单引号''时,将保留引号内每个字符的文字值,变量和命令将不会扩展。

使用printf的典型示例如下:

printf "Open issues: %s\nClosed issues: %s\n" "34" "65"

返回:

Open issues: 34

Closed issues: 65

字符串Open issues: %s\nClosed issues: %s\n是format,而“34”和“65”是参数,format字符串包含用参数替换的两个换行符(\n)和两个格式说明符(%s)。

printf命令不会在行尾添加换行符(\n)。

 

反斜杠转义字符

在格式字符串或与%b转换说明符相对应的参数中使用时,将解释反斜杠转义字符,以下是最常见的转义字符列表:

\\:显示反斜杠字符。

\b:显示一个退格字符。

\n:显示新行。

\r:显示回车符。

\t:显示水平标签。

\v:显示垂直标签。

 

转换规格

转换规范采用以下形式:

%[flags][width][.precision]specifier

每个转换规范以百分号(%)开头,包括可选修饰符,并以以下字母之一结尾,这些字母代表相应参数的数据类型(specifier):aAbcdeEfgGioqsuxX。

1、类型转换说明符

类型转换specifier是一个字符,它指定如何解释相应的参数,该字符是必需的,并且放置在可选字段之后。

以下是显示所有类型转换及其作用的列表:

%b:在扩展反斜杠转义序列时打印参数。

%q:打印用引号引起来的参数,可重复用作输入。

%d,%i:将参数打印为带符号的十进制整数。

%u:将参数打印为无符号十进制整数。

%o:将参数打印为无符号八进制整数。

%x,%X:将参数打印为无符号十六进制整数。%x打印小写字母,%X打印大写字母。

%e,%E:将参数作为浮点数以指数表示法打印。%e打印小写字母,%E打印大写字母。

%a,%A:以十六进制小数表示形式将参数打印为浮点数。%a打印小写字母,%A打印大写字母。

%g,%G:以标准或指数表示形式将参数作为浮点数打印,以更适合给定值和精度的形式为准。%g打印小写字母,%G打印大写字母。

%c:将参数打印为单个字符。

%f:将参数打印为浮点数。

%s:将参数打印为字符串。

%%:打印文字%符号。

无符号数代表零和正数,而有符号数代表负,零和正数。

以下命令在三个不同的数字系统中打印数字100:

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100

返回:

Decimal: 100

Hex: 64

Octal: 144

2、Flags指令

Flags是第一个可选修饰符,用于设置对齐方式,前导零,前缀等。

这是最常见的:

-:在字段中左对齐打印的文本。默认情况下,文本为右对齐。

+:在数字前面加上+或-符号。默认情况下,仅负数前面带有负号。

0:用前导零而不是空格填充数字。

blank:在正数前加上空格,在负数前加上负号(-)。

#:数字的另一种格式。

3、Width指令

Width指令字段放在任何标志字符之后,并指定转换应导致的最小字符数。

如果输出的文本宽度小于指定的宽度,则将其填充空格,宽度可以指定为非负十进制整数或星号(*)。

这是一个例子:

printf "%20s %d\n" Mark 305

%20s表示将字段设置为至少20个字符长,在文本之前添加空格,因为默认情况下输出是右对齐的。要将文本向左对齐,请使用-标志(%-20s):

Mark 305

如果将星号(*)用作width指令,则转换字段的宽度由width参数设置,该参数在要格式化的参数之前。

在下面的示例中,我们将宽度设置为10:

printf "%0*d" 10 5

0是一个标志,用前导零而不是空格来填充数字,输出文本将至少包含10个字符:

0000000005

4、Precision指令

.precision修饰符由一个点(.)和一个正整数或星号(*)组成,这些正整数或星号(*)取决于说明符类型,用于设置要打印的字符串或数字字符数或小数位数。

precision具有以下效果:

1]、如果转换类型是整数,则精度指定要打印的最小位数,如果参数中的位数小于精度,则会打印前导零。

2]、如果转换类型是浮点数,则精度指定小数点字符后的位数,默认精度为6。

3]、如果转换类型是字符串,则精度指定要打印的最大字符数,如果参数中的字符数大于精度,则多余的字符将被截断。

这是显示如何将浮点数四舍五入到小数点后3位的示例:

printf "%.3f" 1.61803398

返回:

1.618

当precision设置为星号(*)时,其值由在要格式化的参数之前的precision参数设置。

printf "%.*f" 3 1.61803398

返回:

1.618

 

相关主题

echo命令_Linux echo命令使用详解:输出指定的字符串或者变量

Linux命令子频道
精选文章
热门文章