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 为前导的常量表明是八进制数,以 0x0X 为前导表明是十六进制数。

1.2 字符串

除了整数常量外,Bash Shell 会将常量都看作字符串。将字符串常量赋值给变量可以有以下三种方式:

1
2
3
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 来分割字符串:

1
IFS=$'\t'