导读
上一篇讲了 zsh 的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print
、printf
的使用等等。其中很多内容没有必要记忆,作为手册参考即可。
转义字符
转义字符是很多编程语言中都有的概念,它主要解决某些字符因为没有对应键盘按键无法直接输出、字符本身有特殊含义(比如 \
、"
)或者显示不直观(比如难以区别多个空格和一个 tab)等问题。
最常用的转义字符是 \n
(换行)、\r
(回车)、\t
(tab)。
直接用 echo
、print
或者 printf
内置命令都可以正常输出转义字符,但包括转义字符的字符串需要用引号(单双引号都可以)扩起来。
|
|
常用转义字符对照表,不常用的可以去查 ASCII 码表,然后使用 \xnn
(如 \x14
)。
转义字符 | 含义 | ASCII 码值(十六进制) |
---|---|---|
\n | 换行 | 0a |
\r | 回车 | 0d |
\t | tab | 09 |
\ | \ | 5c |
` | ` | 60 |
\xnn | 取决于 nn | nn |
可以用 hexdump
命令查看字符的 ASCII 码值。
|
|
还有一些字符是可选转义(通常有特殊含义的字符都是如此)的,比如空格、"
、'
、*
、~
、$
、&
、(
、)
、[
、]
、{
、}
、;
、?
等等,即如果在引号里边则无需转义(即使转义也不出错,转义方法都说前边加一个 \
),但如果在引号外边则需要转义。谨慎起见,包含半角符号的字符串全部用引号包含即可,可以避免不必要的麻烦。
可以这样检查一个字符在空格外是否需要转义,输出的字符中前边带 \
的都是需要的。
|
|
单引号
单引号的左右主要是为了避免字符串里的特殊字符起作用。在单引号中,只有一个字符需要转义,转义符号 \
。所以如果字符串里包含特殊符号时,最好使用单引号包含起来,避免不必要的麻烦。如果字符串需要包含单引号,可以使用这几种方法。
|
|
双引号
双引号的作用类似单引号,但没有单引号那么严格,有些特殊字符在双引号里可以继续起作用。
|
|
简单说,$
加各种东西的用法在双引号里都是可以正常使用的,而其他特殊符号(比如 *
、?
、>
)的功能通常不可用。
反引号
反引号是用来运行命令的,它会返回命令结果,以便保存到变量等等。
|
|
反引号的功能和 $( )
功能基本一样,但 $( )
可以嵌套,而反引号不可以,而且反引号看起来更费事,某些字体中的反引号和单引号差别不大。所以在脚本里不建议使用反引号。