linux-command/command/printf.md

94 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

printf
===
格式化并输出结果
## 补充说明
**printf命令** 格式化并输出结果到标准输出。
### 语法
```shell
printf(选项)(参数)
--help在线帮助
--version显示版本信息。
```
### 参数
* 输出格式:指定数据输出时的格式;
* 输出字符串:指定要输出的数据。
**格式替代符**
* %b 相对应的参数被视为含有要被处理的转义序列之字符串。
* %c ASCII字符。显示相对应参数的第一个字符
* %d, %i 十进制整数
* %e, %E, %f 浮点格式
* %g %e或%f转换看哪一个较短则删除结尾的零
* %G %E或%f转换看哪一个较短则删除结尾的零
* %o 不带正负号的八进制值
* %s 字符串
* %u 不带正负号的十进制值
* %x 不带正负号的十六进制值使用a至f表示10至15
* %X 不带正负号的十六进制值使用A至F表示10至15
* %% 字面意义的%
**转义序列**
* \a 警告字符通常为ASCII的BEL字符
* \b 后退
* \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效而且任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略
* \f 换页formfeed
* \n 换行
* \r 回车Carriage return
* \t 水平制表符
* \v 垂直制表符
* \\\\ 一个字面上的反斜杠字符
* \ddd 表示1到3位数八进制值的字符仅在格式字符串中有效
* \0ddd 表示1到3位的八进制值字符
### 实例
```shell
printf "hello world"
```
```shell
#!/bin/bash
printf "%-5s %-10s %-4s\n" NO Name Mark
printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345
printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323
```
* %-5s 格式为左对齐且宽度为5的字符串代替-表示左对齐),不使用则是右对齐。
* %-4.2f 格式为左对齐宽度为4保留两位小数。
### 按行打印数组和关联数组的下标及值
```shell
#!/bin/bash
#声明数组array可以不加 'declare -a' 或 'local -a'(在函数内声明的局部变量)
array1=('line1' 'line2')
#声明关联数组(也就是字典)必须加 'declare -A' 或 'local -A'(在函数内声明的局部变量)
declare -A assoc_array1=(['key1']='value1' ['key2']='value2')
printf "%s\n" ${array1[@]}
#line1
#line2
printf "%s\n" ${!array1[@]}
#0
#1
printf "%s\n" ${assoc_array1[@]}
#value2
#value1
printf "%s\n" ${!assoc_array1[@]}
#key2
#key1
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->