BashShell常量和特殊字符

2022-02-28 20:40:41 浏览数 (1)

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

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'

0 人点赞