Bash printf命令
通常,在编写bash脚本时,我们使用 echo
打印到标准输出。 echo
这是一个简单的命令,但功能有限。要对输出的格式进行更多控制,请使用 printf
命令。
的 printf
命令格式并打印其参数,类似于C printf()
功能。
printf
命令#
printf
是Bash和其他流行的Shell(例如Zsh和Ksh)内置的Shell。 还有一个独立的 /usr/bin/printf
二进制,但shell内置版本优先。 我们将介绍Bash的内置版本 printf
。
的语法 printf
命令如下:
printf [-v var] format [arguments]
的 -v
选项告诉 printf
不是打印输出而是将其分配给变量。
的 format
是一个字符串,其中可能包含三种不同类型的对象:
- 普通字符按原样简单地打印到输出中。
- 反斜杠转义的字符,这些字符将被解释然后打印。
- 描述格式的转换规范,并由格式字符串后的各个参数的值代替。
该命令接受任意数量的 arguments
。 如果更多 arguments
比提供的格式说明符 format
字符串被重用以使用所有参数。 如果更少 arguments
如果不提供格式说明符,则将多余的数字格式说明符设置为零值,而字符串格式说明符设置为空字符串。
以下是传递参数时要考虑的几点 printf
命令:
- 在将参数传递给参数之前,shell将替换所有变量,通配符匹配和特殊字符。
printf
命令。 - 使用单引号时
''
引号内每个字符的字面值将保留。 变量和命令将不会扩展。
使用的典型例子 printf
好像:
printf "Open issues: %snClosed issues: %sn" "34" "65"
Open issues: 34
Closed issues: 65
字符串 Open issues: %snClosed issues: %sn
是个 format
而“ 34”和“ 65”是自变量。 格式字符串包含两个换行符(n
)和两个格式说明符(%s
)替换为参数。
的 printf
命令不添加换行符(n
)。
反斜杠转义字符
在格式字符串或与a相对应的参数中使用时,将解释反斜杠转义字符。 %b
转换说明符。 以下是最常见的转义字符列表:
\
-显示反斜杠字符。b
-显示退格字符。n
-显示新行。r
-显示回车。t
-显示水平标签。v
-显示垂直标签。
转换规格
转换规范采用以下形式:
%[flags][width][.precision]specifier
每个转换规格均以百分号(%
),包括可选的修饰符,并以代表数据类型的以下字母之一结尾(specifier
)的相应参数: aAbcdeEfgGioqsuxX
。
类型转换说明符
类型转换 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: %dnHex: %xnOctal: %on" 100 100 100
Decimal: 100
Hex: 64
Octal: 144
标志指令
标志是第一个可选修饰符,用于设置对齐方式,前导零,前缀等。
这是最常见的:
-
-在字段内左对齐打印的文本。 默认情况下,文本为右对齐。+
-在数字前加上数字+
要么-
迹象。 默认情况下,仅负数前面带有负号。0
-用前导零而不是空格填充数字。- 空白
-在正数前加上空格,在负数前加上负号(
-
)。 #
-数字的另一种格式。
宽度指令
的 width
指令字段放置在任何标志字符之后,并指定转换应导致的最小字符数。
如果输出的文本宽度小于指定的宽度,则用空格填充。 宽度可以指定为非负十进制整数或星号(*
)。
这是一个例子:
printf "%20s %dn" Mark 305
%20s
表示将字段设置为至少20个字符。 在文本之前添加空格,因为默认情况下输出是右对齐的。 要将文本向左对齐,请使用 -
标记(%-20s
)。
Mark 305
当星号(*
)用作 width
指令,则转换字段的宽度由宽度参数设置,该参数位于要格式化的参数之前。
在下面的示例中,我们将宽度设置为10:
printf "%0*d" 10 5
0
是一个标志,该数字将前导零而不是空格填充在数字上。 输出文本将至少包含10个字符:
0000000005
精度指令
的 .precision
修饰符由一个点(.
)后跟一个正整数或星号(*
),根据说明符类型,设置要打印的字符串或数字字符数或小数位数。
精度具有以下作用:
- 如果转换类型是整数,则精度指定要打印的最小位数。 如果参数中的位数小于精度,则会打印前导零。
- 如果转换类型是浮点数,则精度指定小数点字符后的位数。 默认精度为6。
- 如果转换类型是字符串,则精度指定要打印的最大字符数。 如果参数中的字符数大于精度,则多余的字符将被截断。
这是显示如何将浮点数四舍五入到小数点后3位的示例:
printf "%.3f" 1.61803398
1.618
当精度设置为星号(*
),则其值由要设置格式的参数之前的precision参数设置。
printf "%.*f" 3 1.61803398
1.618
结论#
的 printf
命令采用格式和参数,并输出格式化的文本。
如果您有任何疑问或反馈,请随时发表评论。
bash终端