bash 中的格式化输出命令:printf |
您所在的位置:网站首页 › format指令 › bash 中的格式化输出命令:printf |
在 Linux 命令行中最简单的打印方法是使用 echo 命令: echo "Value of var is $var"然而,echo 命令不支持格式化输出。要格式化输出,可以使用 printf 命令,bash 中的 printf 与 c/c++ 中的printf 命令类似: printf "My brother %s is %d years old.\n" Prakash 21其输出如下所示: 第一个参数 %s 接受一个字符串,第二个参数 %d 接受的是一个十进制整数,就跟 c/c++ 中的一样。接下来我们展示一些 bash printf 命令的例子。 bash 中的 printf 命令printf 命令的语法如下: printf format [arguments]这里,format 是一个字符串,用于确定后续值的显示方式。 在上面的例子中 printf "My brother %s is %d years old.\n" Prakash 21,前面的语句 "My brother %s is %d years old.\n" 是格式,后面的 Prakash 和 21 是参数,这些参数用于替换前面格式中的占位符 %s 和 %d。 在最简单的方式中,printf 的使用跟 echo 类似: printf "Hello World\n"注意到最后面的换行符 \n 了吗?echo 和 printf 命令的区别在于,echo 命令会自动在末尾添加一个换行符,但是 printf 命令需要手动添加。 要特别注意参数的类型和数量这里需要注意,格式化字符串通常会尝试应用于所有参数。看下面的例子: $ printf "Hello, %s! \n" Abhishek PrakashHello, Abhishek! Hello, Prakash!同时,也需要尽量匹配格式化字符串中所期望的数据类型: 通过上面的例子可以看到,如果没有找到匹配的参数,会使用默认值,默认字符串为 null,整数为 0. printf "Hi %s, your room number is %d. \n" Abhishek Prakash 131bash: printf: Prakash: invalid numberHi Abhishek, your room number is 0. Hi 131, your room number is 0.上面代码中,Abhishek Prakash 会被用于第一个参数,131 会被用于第二个参数。 当它找到一个字符串(Prakash)而不是整数时,就会报错,但它会继续显示第二个参数为默认值0的输出。 类似地,它将131视为第二组参数中的字符串,由于第二个参数不存在,因此它默认为0。 规范格式字符有几个格式说明符可用于以所需格式显示输出。以下是一些最常见的: 字符 用途 %s String %c Single character %d Integers %o Octal integers %x Hexadecimal integers %f Floating point %b String with backslash escape character %% Percent sign 一些例子下面是一些比较简单的例子,通过命令就可以看出它的用法。 $ printf "The octal value of %d is %o\n" 30 30The octal value of 30 is 36让我们看看使用 %b 说明符来正确解释反斜杠转义字符。 $ printf "String with backslash: %s\n" "Hello\nWorld!"String with backslash: Hello\nWorld!上面例子中 %s 正常使用,这个没有什么好解释的,但是参数中的 \n 换行符却没有起作用。这时候,需要用到 %b: $ printf "String with backslash: %b\n" "Hello\nWorld!"String with backslash: HelloWorld!当使用 %c 时,它一次只读取一个字符: $ printf "Character: %c\n" aCharacter: a$ printf "Character: %c\n" a b cCharacter: aCharacter: bCharacter: c$ printf "Character: %c\n" abcCharacter: a使用修饰符以特定样式显示 printf 输出有一些字符可以用于根据你的喜好来设置输出的样式。 # 用于显示八进制和十六进制数字 早些时候,我们使用过 %o 将十进制转为八进制,但是输出却不能很清楚的看出来这是一个八进制,所以现在我们使用修饰符 # 来正确的显示八进制和十六进制的数字。 $ printf "%d is %#o in octal and %#x in hexadecimal\n" 30 30 3030 is 036 in octal and 0x1e in hexadecimal正整数的空格修饰符可以在 % 和 d 之间加一个空格来显示带前导空格的正整数,当有正数和负数时,这样显示会更规范,如下所示: $ printf "%d \n%d \n%d \n" 10 -10 1010 -10 10 $ printf "% d \n%d \n% d \n" 10 -10 10 10 -10 10宽度修改器宽度修饰符是一个整数,用于指定参数的最小字段宽度。 默认情况下,它是右对齐的: $ printf "%10s| %5d\n" Age 23 Age| 23可以使用中划线 - 来让其左对齐: $ printf "%-10s| %-5d\n" Age 23Age | 23设置精度可以使用一个点 . 来指定 %d、%u、%o、%x 显示的最小位数,不足位的左侧以 0 补充。如下所示: $ printf "Roll Number: %.5d\n" 23Roll Number: 00023如果对字符串使用精度修饰符,它会指定字符串的最大长度。如果字符串较长,则会在显示中被截断。 $ printf "Name: %.4s\n" AbhishekName: Abhi还可以组合宽度和精度修改器: $ printf "Name: %.4s\n" AbhishekName: Abhi$ printf "Name: %10.4s\n" AbhishekName: Abhi以表格格式显示输出下面我们看一个稍微复杂一点的例子,在 bash 中使用 printf 命令打印如下表格: Name ID Age Grades Sherlock Holmes 0000122 23 A James Bond 0000007 27 F Hercules Poirot 0006811 59 G Jane Marple 1234567 71 C 下面是我编写的脚本,大家根据各自情况可以尝试一下: #/bin/bashseperator=--------------------seperator=$seperator$seperatorrows="%-15s| %.7d| %3d| %c\n"TableWidth=37printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Gradesprintf "%.${TableWidth}s\n" "$seperator"printf "$rows" "Sherlock Holmes" 122 23 Aprintf "$rows" "James Bond" 7 27 Fprintf "$rows" "Hercules Poirot" 6811 59 Gprintf "$rows" "Jane Marple" 1234567 71 C运行,其输出如下: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |