1. 常量
1.1 整数
Bash Shell 中的整数常量的基本形式如下:
代码语言:javascript复制[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 会将常量都看作字符串。将字符串常量赋值给变量可以有以下三种方式:
代码语言:javascript复制var=str # 无引号,字符串不能出现空白符
var='str' # 单引号
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 来分割字符串:
代码语言:javascript复制IFS=$'t'