目录
摘要
在本章,我们会讨论变量和参数的高级使用。完成之后,你将能够:
声明并使用一个变量的数组
指定你想使用的变量的顺序
使变量只读
使用 set 对一个变量进行赋值
就像我们已经看到的,Bash理解许多种变量和参数。迄今,我们还没有对进行赋值的变量的种类太操心,所以我们的变量可以存放任何我们赋予的值。一个简单的命令行证明了这个:
[bob in ~]VARIABLE=12[bob in ~]echo$VARIABLE12[bob in ~]VARIABLE=string[bob in ~]echo$VARIABLEstring
有些情况下我们想防止这种行为的产生,比如需要存放电话号码和其他数字。除了整数和变量,你也可能向指定一个变量为常量。一个常量的值的声明,通常在脚本的开始处。之后,只有指向常量的引用,所以当常量需要改变的时候,只需要做一次。一个变量也可以是一系列任何类型的变量,所谓的变量的
                  数组  (VAR0VAR1, 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-iVARIABLE=12[bob in ~]VARIABLE=string[bob in ~]echo$VARIABLE0[bob in ~]declare-pVARIABLEdeclare -i VARIABLE="0"
注意Bash有一个选项来声明一个数字值,但是却没有选项用来声明字符串。这是因为,默认下,如果没有特别指明,变量可以拥有任何类型的数据:
[bob in ~]OTHERVAR=blah[bob in ~]declare-pOTHERVARdeclare -- OTHERVAR="blah"
只要你限制了对变量的赋值,那它只能存放那种类型的数据。可能限制是整数,常量或者数组。
参见Bash信息页面来获得更多关于返回状态的信息。
在Bash中,常量是通过建立一个只读变量创建的。readonly 内建命令使每个指定的变量成为不能改变的。语法是:
readonly  
                  OPTION VARIABLE(s)
这些变量的值就不能再被后来的赋值改变了。如果带 -f 选项,每个变量指向一个shell函数;参见 第 11 章 函数。如果指定 -a 选项,每个变量指向一个变量数组。如果没有给出任何参数,或者如果提供 -p 选项,就会显示所有的只读变量的列表。使用 -p 选项,输出能被当作输入重用。
               
除非指定一个非法的选项,其中一个变量或者函数不存在,或者 -f 提供给一个变量名而不是一个函数,否则返回状态就是0。
               
[bob in ~]readonlyTUX=penguinpower[bob in ~]TUX=Mickeysoftbash: TUX: readonly variable