Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712268
  • 博文数量: 165
  • 博客积分: 8218
  • 博客等级: 中将
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-07 19:48
文章分类

全部博文(165)

文章存档

2014年(4)

2011年(3)

2010年(6)

2009年(43)

2008年(109)

分类: LINUX

2008-12-17 16:04:02

2.数组

bash只提供一维数组,并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标。下标可以是整数或算术表达式,其值应大于或等于0。用户可以使用赋值语句对数组变量赋值。对数组元素赋值的一般形式是: 数组名[下标]=值 例如:

$  city[0]=Beijing
$ city[1]=Shanghai
$ city[2]=Tianjin
$

也可以用declare命令显式声明一个数组,一般形式是:

declare  -a  数组名

读取数组元素值的一般格式是:

${数组名[下标]}

例如:

$  echo  ${city[0]}
Beijing

一个数组的各个元素可以利用上述方式一个元素一个元素地赋值,也可以组合赋值。定义一个数组并为其赋初值的一般形式是:

数组名=(值1  值2  ...  值n)

其中,各个值之间以空格分开。

例如:

$  A=(this is an example of shell script)
$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}
this an example script
$ echo ${A[8]}

$

由于值表中初值共有7个,所以A的元素个数也是7。A[8]超出了已赋值的数组A的范围,就认为它是一个新元素,由于预先没有赋值,所以它的值是空串。

若没有给出数组元素的下标,则数组名表示下标为0的数组元素,如city就等价于city[0]。

使用*或@做下标,则会以数组中所有元素取代[*]或[@]。


3.变量引用

除了上面所介绍的变量引用方式外,在bash中还有其它的引用方式。归纳起来,有效的变量引用表达式有以下形式:

$name			${name#pattern}
${name} ${name##pattern}
${name[n]} ${name % pattern}
${name[*]} ${name %% pattern}
${name [@]} ${#@}
${name:-word} ${$#*}
${name:=word} ${# name }
${name:?word} ${# name[*]}
${name:+word} ${#name[@]}

(1)表达式$name表示变量name的值,若变量未定义,则用空值替换。

(2)表达式${name}将被变量name的值替换。用花括号括起name,目的在于把变量名与后面的字符分隔开,避免出现混淆。替换后花括号被取消。

(3)${name[n]}表示数组变量name中第n个元素的值。

(4)表达式${name[*]}和${name[@]}都表示数组name中所有 非空元素的值,每个元素的值用空格分开。如果用双引号把它们都括起来,那么二者的含义就有区别:对于"${name[*]}",它被扩展成一个词(即字符 串),这个词由以空格分开的各个数组元素组成;对于"${name[@]}",它被扩展成多个词,每个数组元素是一个词。如果数组name中没有元素, 则${name[@]}被扩展为空串。

(5)表达式${name:-word}、${name:=word}、${name:+word}、${name:?word}的计算方法在下面介绍。

(6)表达式${name#pattern}和${name##pattern}, 如果pattern(表示匹配模式)与name值的开头匹配,那么name的值去掉匹配部分后的结果就是该表达式的值;否则, name的值就是该表达式的值。在第一种格式中,name值去掉的部分是与pattern匹配的最少的部分;而第二种格式中,name值去掉的部分是与 pattern匹配的最多的部分。

(7)表达式${name % pattern}和${name %% pattern},如果pattern与name值的末尾匹配,那么name的值中去掉匹配部分后的结果就是该表达式的值;否则,该表达式的值就是 name的值。在第一种格式中,去掉的部分是最少的匹配部分;而第二种格式中,去掉的部分是最多的匹配部分。

(8)表达式${#@}和${#*}的值分别是由$@和$*返回的参数的个数。

(9)表达式${#name[i]}的值是数组name第i个元素值的长度(字符个数)。

(10)表达式${#nane[*]}和${#name[@]}的值都是数组name中已经设置的元素的个数。

阅读(611) | 评论(0) | 转发(0) |
0

上一篇:shell 编程2

下一篇:shell 编程4

给主人留下些什么吧!~~