BashShell常量和特殊字符
1. 常量
1.1 整数
Bash Shell 中的整数常量的基本形式如下:
1 | [base#]n |
其中,base
是一个 2 到 64 的十进制数值,表示数字的基数;n
是在 base 基数中的数字的值。如果忽略 base#
,则默认以 10 为基数。n
中的每一位数如果大于 9,则依次以小写字母、大写字母、@
、_
表示(最大表示到十进制中的 63,因为 base
最大为 64)。
-
如果
base
小于或等于 36,则在表示n
中的每一位数时,如果该位数字在 10 到 35 之间,表示该位数字的小写字母可以和大写字母进行互换。 -
对于八进制和十六进制,有更简洁的表示,即以 0 为前导的常量表明是八进制数,以
0x
或0X
为前导表明是十六进制数。
1.2 字符串
除了整数常量外,Bash Shell 会将常量都看作字符串。将字符串常量赋值给变量可以有以下三种方式:
1 | var=str # 无引号,字符串不能出现空白符 |
其中,str
、'str'
和 "str"
都是字符串常量。
2. 特殊字符
2.1 元字符
元字符在未被引号包裹时有特殊的作用,而且可以用来分隔单词。Bash Shell 中的元字符有:<space>
、<tab>
、<newline>
、|
、&
、;
、(
、)
、<
、>
和 !
。
2.2 转义字符
转义字符 \
用来转义元字符,使得它们仅被当作字符而不被解析为特殊含义。
【注】 \
不能用来转义 <newline>
,\<newline>
表示一行的继续,即 <newline>
在最终的输入流中最终会被移除。
2.3 单引号
单引号包裹的所有字符将都将作为字面上的字符看待,不会解析其中任何的特殊含义。
2.4 双引号
双引号包裹的所有内容将大多数字符都按照字面上的字符看待,除了 $
、`
、\
和 !
。
!
:如果 Bash Shell 是在 POSIX 模式下,则该字符没有任何含义。\
:只有当其后面接续的字符为$
、`
、"
、\
、<newline>
时,它才会被当作转义字符看待;其他情况都当作字面上的字符看待。
【注】当双引号中包裹着 $
时,在 $
的作用域内可以有更多的特殊字符,比如 *
和 @
等,详细介绍参见 BashShell字符串。
2.5 ANSI-C 引号
格式为 $'str'
的字符在 Bash Shell 中也被当作特殊字符对待,其中 str
和 ANSI-C 标准定义的特殊字符一样:
特殊字符 | 说明 |
---|---|
\a |
警报 |
\b |
回格 |
\f |
换页 |
\n |
换行 |
\r |
回车 |
\t |
水平制表 |
\v |
垂直制表 |
\\ |
反斜杠 |
\' |
单引号 |
\" |
双引号 |
\? |
问号 |
\nnn |
八进制数值(8 Bit) |
\xHH |
十六进制数值(8 Bit) |
\uHHHH |
十六进制表示 16 Bit Unicode 字符 |
\UHHHHHHHH |
十六进制表示 32 Bit Unicode 字符 |
\cx |
Ctrl+x |
比如,定义域分隔变量 IFS 以 Tab 来分割字符串:
1 | IFS=$'\t' |