目录
摘要
在本章,我们会讨论变量和参数的高级使用。完成之后,你将能够:
声明并使用一个变量的数组
指定你想使用的变量的顺序
使变量只读
使用 set 对一个变量进行赋值
就像我们已经看到的,Bash理解许多种变量和参数。迄今,我们还没有对进行赋值的变量的种类太操心,所以我们的变量可以存放任何我们赋予的值。一个简单的命令行证明了这个:
[bob in ~]
VARIABLE
=12
[bob in ~]
echo$VARIABLE
12[bob in ~]
VARIABLE
=string
[bob in ~]
echo$VARIABLE
string
有些情况下我们想防止这种行为的产生,比如需要存放电话号码和其他数字。除了整数和变量,你也可能向指定一个变量为常量。一个常量的值的声明,通常在脚本的开始处。之后,只有指向常量的引用,所以当常量需要改变的时候,只需要做一次。一个变量也可以是一系列任何类型的变量,所谓的变量的
数组 (VAR0
VAR1
, VAR2
, ... VARN
).
使用一个 declare 语句,我们可以限制赋给变量的值。
以下是 declare 的语法:
declare
OPTION(s)
VARIABLE
=value
下列选项用来确定变量能存放的数据的类型和分配给它的属性:
表 10.1. declare 内建命令的选项
选项 | 含义 |
---|---|
-a |
变量为数组。 |
-f |
仅使用函数名。 |
-i |
把变量当作整数来对待;变量被赋值之后就进行算术计算(参见 第 3.4.6 节 “算术扩展”)。 |
-p |
显示每个变量的属性和值。当使用 -p 选项,其他选项就被忽略。
|
-r |
使得变量变为只读。这些变量不能被后来的赋值与语句赋值,同样也不可以unset。 |
-t |
给于每个变量 trace 属性。 |
-x |
Mark each variable for export to subsequent commands via the environment. |
使用 +
代替 -
来关闭属性。当使用在函数中时,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信息页面来获得更多关于返回状态的信息。
在Bash中,常量是通过建立一个只读变量创建的。readonly 内建命令使每个指定的变量成为不能改变的。语法是:
readonly
OPTION
VARIABLE(s)
这些变量的值就不能再被后来的赋值改变了。如果带 -f
选项,每个变量指向一个shell函数;参见 第 11 章 函数。如果指定 -a
选项,每个变量指向一个变量数组。如果没有给出任何参数,或者如果提供 -p
选项,就会显示所有的只读变量的列表。使用 -p
选项,输出能被当作输入重用。
除非指定一个非法的选项,其中一个变量或者函数不存在,或者 -f
提供给一个变量名而不是一个函数,否则返回状态就是0。
[bob in ~]
readonlyTUX
=penguinpower
[bob in ~]
TUX
=Mickeysoft
bash: TUX: readonly variable