10.1. 变量类型

10.1.1. 值的通用赋值

正如我们已经看到的,Bash 理解许多不同类型的变量或参数。到目前为止,我们还没有过多关注我们赋值的变量类型,因此我们的变量可以保存我们分配给它们的任何值。一个简单的命令行示例演示了这一点

[bob in ~] VARIABLE=12

[bob in ~] echo $VARIABLE
12

[bob in ~] VARIABLE=string

[bob in ~] echo $VARIABLE
string

在某些情况下,您希望避免这种行为,例如在处理电话号码和其他数字时。除了整数和变量之外,您可能还希望指定一个变量作为常量。这通常在脚本的开头完成,在声明常量的值时。之后,只有对常量变量名的引用,这样当常量需要更改时,只需要更改一次。一个变量也可以是任何类型的一系列变量,即所谓的变量数组 (VAR0VAR1, VAR2, ... VARN).

10.1.2. 使用 declare 内建命令

使用 declare 语句,我们可以限制变量的值赋值。

declare 的语法如下

declare选项 变量=值

以下选项用于确定变量可以保存的数据类型并为其分配属性

表 10-1. declare 内建命令的选项

选项含义
-a变量是一个数组。
-f仅使用函数名称。
-i该变量将被视为整数;当为变量赋值时,将执行算术运算(参见 第 3.4.6 节)。
-p显示每个变量的属性和值。当-p被使用时,额外的选项将被忽略。
-r将变量设为只读。这些变量随后不能通过后续的赋值语句赋值,也不能被取消设置。
-t为每个变量赋予 trace 属性。
-x标记每个变量以便通过环境导出到后续命令。

使用+而不是-会关闭该属性。当在函数中使用时,declare 会创建局部变量。

以下示例显示了为变量分配类型如何影响值。

[bob in ~] declare -i VARIABLE=12

[bob in ~] VARIABLE=string

[bob in ~] echo $VARIABLE
0

[bob in ~] declare -p VARIABLE
declare -i VARIABLE="0"

请注意,Bash 有一个选项可以声明数值,但没有声明字符串值的选项。这是因为,默认情况下,如果没有给出任何规范,变量可以保存任何类型的数据

[bob in ~] OTHERVAR=blah

[bob in ~] declare -p OTHERVAR
declare -- OTHERVAR="blah"

一旦您限制了对变量的值赋值,它就只能保存该类型的数据。可能的限制是整数、常量或数组。

有关返回状态的信息,请参阅 Bash info 页面。

10.1.3. 常量

在 Bash 中,常量是通过将变量设置为只读来创建的。readonly 内建命令将每个指定的变量标记为不可更改。语法是

readonly选项 变量

这些变量的值随后不能再通过后续赋值来更改。如果给出了-f选项,则每个变量都引用一个 shell 函数;参见 第 11 章。如果-a被指定,则每个变量都引用一个变量数组。如果没有给出参数,或者如果-p被提供,则会显示所有只读变量的列表。使用-p选项,输出可以作为输入重用。

返回状态为零,除非指定了无效选项,其中一个变量或函数不存在,或者-f为变量名而不是函数名提供。

[bob in ~] readonly TUX=penguinpower

[bob in ~] TUX=Mickeysoft
bash: TUX: readonly variable