Linux Bash Shell学习(十八):String I/O——echo和printf

简介:

本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之读书笔记之二。

echo

  echo是非常常用的shell命令。参数如下:

  • -e:打开反斜杠字符backslash-escaped的解析,即对/n,/t等字符进行解析,而不视之为两个字符
  • -E:关闭反斜杠字符的解析,/n作为两个字符,这是系统缺省模式
  • -n:删除最后的换行

  backslash-escaped有下面参数,注意需要加上选择-e方可生效。

/a : 发出警告铃音(ALERT or CTRL-G (bell)) 
/b : 退格(BACKSPACE or CTRL-H ) 
/c : 删除最后的字符及最后的换行(Omit final NEWLINE ) 
/e : 删除后面的一个字符(Escape character (same as /E) ) 
/E : 同上(Escape character) 
/f : 换页符,在某些现实中会清屏,有些会换行(FORMFEED or CTRL-L ) 
/n : 换行(NEWLINE (not at end of command) or CTRL-J ) 
/r : 从行头开始,和换行不一样,仍在本行(RETURN (ENTER) or CTRL-M ) 
/t : tab键(TAB or CTRL-I ) 
/v : 竖直tab,和/f一样,显示不同机器有所不一样,通常会引起换行VERTICAL TAB or CTRL-K 
/n : 在cygwin中使用/65,无法正确显示'A’但是下面两种方法否可以显示。ASCII character with octal (base-8) value n, where n is 1 to 3 digits 
/0nnn : 用8进制的值表示一个字符,例如/0101,即65,表示字符’A’(The eight-bit character whose value is the octal (base-8) value nnn where nnn is 1 to 3 digits ) 
/xHH : 用16进制的值表示一个字符,例如/x41,即65,表示字符’A’The eight-bit character whose value is the hexadecimal (base-16) value HH (one or two digits) 
// : 表示‘/’Single backslash

  倒数第2-4,用数值来表示字符和设备相关,通常用于复杂的IO操作,例如光标控制和特殊的图形符号。

printf

  Linux提供一个功能更强大,更灵活的打印命令printf。printf和C语言的使用方式类似。和echo不一样,它不会在最后自动加上换行,需要写入命令中。例如printf "Hello, world/n"。printf的命令格式如下:

 

printf format-string [arguments]

 

  例子为:printf "%s, %s/n" hello world。如果格式需要的参数比后面给出的多,超出的部分为0或者null。格式如下。

%c:ASCII字符,如果参数给出字符串,则打印第一个字符 
%d:10进制整数 
%i:同%d 
%e:浮点格式([-]d.精度[+-]dd) 
%E:浮点格式([-]d.精度E[+-]dd) 
%f:浮点格式([-]ddd.precision) 
%g:%e或者%f的转换,如果后尾为0,则删除它们 
%G:%E或者%f的转换,如果后尾为0,则删除它们 
%o:8进制 
%s:字符串 
%u:非零正整数 
%x:十六进制 
%X:非零正数,16进制,使用A-F表示10-15 
%%:表示字符"%"

  如果需要限定输出的宽度,格式为%flags width.precision format-specifier,width是整数,右边对齐,如果需要左边对齐,在前面加“-”,例如"%-20s"表示从左边开始对齐,宽度为20,如果字符串长度少于20,通过空格补齐。precision在浮点值中提供四舍五入。例如%5.6G,长度为5,精度为6。精度是可选的。长度和精度的值可以参数中指定,例如printf "%*.*G/n" 5 6 $myvalue。长度指显示中占的字符长度,与字符长度的同义。如果长度比实际的少,例如实际字符长度更大或者所要求的精度更大,则显示按实际长度。

%d, %I, %o, %u, %x, %X:在里面使用精度,表示最小显示的数字。如果显示的数字比需求少,则补充0。缺省值为1. 
%e, %E:在里面使用精度,表示最小显示的数字。如果显示的数字比需求少,在小数点后面补充0。缺省值为10.精度度为0经隐藏小数点。 
%f:在这里的精度,表示小数点后面的数字的数目。 
%g, %G:这里的精度,表示最大的有效数字的数目。 
%s:这里的精度,表示最大的字符数目。

  在前面,介绍了”-“作为左对齐,下面介绍这些特殊符号

-:左对齐 
space:正数前面加空格,负数前面加符号,例如12.12,|% f|,显示| 12.120000|,注意前面留了一个空格。例如-12.12,|% f|,显示|-12.120000| 
+:对于数码给予正负号。 
#:给出另一种格式:

  • %o以8进制显示整数,而%#o则在前面加上零,表明是八进制,例如12,显示014
  • %x或者%X以16进制的方式显示整数,而%#x或者%#X,在16进制的整数前面加上0x或者0X来表示,例如12,显示0XC
  • %#e,%#E, %#f,将只以十进制显示
  • %#g,%#G,将不删除最后无关的补齐0,例如12.1200,将全部显示,而不是12.12。
0:对于数目,不使用空格,而使用0来作为补齐。

  介绍两个特别的字符显示格式%b和%q。

 

%b:表示解析字符串的特殊的字符,包括/n等等。例如printf "%s/n" 'hello/nworld',显示hello/nworld,要将/n作为换行符,则需要用printf "%b/n" 'hello/nworld' 。

%q:printf "%q/n" "greetings to the world"显示为greetings/ to/ the/ world,可以作为shell的输入。

本文转自博客园知识天地的博客,原文链接:Linux Bash Shell学习(十八):String I/O——echo和printf,如需转载请自行联系原博主。

相关文章
|
17小时前
|
网络协议 Shell Linux
LabVIEW 在NI Linux实时设备上访问Shell
LabVIEW 在NI Linux实时设备上访问Shell
|
1天前
|
消息中间件 存储 Linux
linux实时应用如何printf输出不影响实时性?
本文探讨了Linux实时任务中为何不能直接使用`printf(3)`,并介绍了实现不影响实时性的解决方案。实时任务的执行时间必须确定且短,但`printf(3)`的延迟取决于多个因素,包括用户态glibc缓冲、内核态TTY驱动和硬件。为确保实时性,通常将非实时IO操作交给低优先级任务处理,通过实时进程间通信传递信息。然而,即使这样,`printf(3)`在glibc中的实现仍可能导致高优先级任务阻塞。Xenomai 3提供了一个实时的`printf()`实现,通过libcobalt库在应用编译链接时自动处理,预分配内存,使用共享内存和线程特有数据来提高效率和实时性。
10 0
linux实时应用如何printf输出不影响实时性?
|
2天前
|
Shell Linux
【Linux】进程实践项目(更新中) — 自主shell编写
前几篇文章,我们学习进程的相关知识:进程概念,进程替换,进程控制。熟悉了进程到底是个什么事情,接下来我们来做一个实践,来运用我们所学的相关知识。这个项目就是手搓一个shell模块,模拟实现Xshell中的命令行输入。
7 1
|
2天前
|
自然语言处理 Java Linux
【Linux】开始学习进程替换吧!
通过学习进程替换,我们可以体会到多语言混搭的快乐,可以从C语言直接蹦到python ,也可以从c++里运行java代码。是不是很厉害!这是通过调度多个进程的效果,联系我们之前学习的进程,进程控制等概念。我们可以想要运行其他代码可以通过创建子进程来实现,但是这样也肯定是同一种语言,如果想要运行其他语言,那是不是有种方法可以调度一个进程来当做子进程呢??? 我们开始今天的学习吧!
8 0
|
2天前
|
Shell Linux 信息无障碍
5 个有用的 Linux Shell 转义序列
5 个有用的 Linux Shell 转义序列
|
4天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
20 5
|
4天前
|
Linux Shell 程序员
【Linux】权限(shell运行原理、概念,Linux权限)
【Linux】权限(shell运行原理、概念,Linux权限)
12 2
|
5天前
|
存储 运维 Java
Linux笔记02 —— Shell补充
Linux笔记02 —— Shell补充
30 2
|
7月前
|
Shell
Shell脚本开发:printf和test命令的实际应用
Shell printf 命令 当你使用Shell中的printf命令时,它可以帮助你格式化和输出文本。 打印简单文本 这将简单地打印字符串"Hello, World!",并在末尾添加一个换行符\n来换行。 printf "Hello, World!\n" Shell test 命令 当你使用Shell中的test命令时,它用于测试条件是否为真(True)。test命令通常用于Shell脚本中的条件判断,以便根据条件的结果执行不同的操作。
32 1
|
5月前
|
Shell 知识图谱
Shell printf 命令
Shell printf 命令
26 0