十年运维系列之基础篇 - Linux
作者:曾林
联系:1494445739@qq.com
版权:文章未经同意请勿转载
在上一节中,我们了解了shell如何操作字符串和数字。到目前为止,我们所接触到的数据类型在计算机科学领域被称为标量变量,也就是说,该变量包含一个单一的值。
在本章中,我们将会学习一种包含多个值的数据结构——数组。事实上,数组几乎是所有程序设计语言的一大特点。尽管shell对数组的支持有限,但它对解决程序设计问题是非常有帮助的。
数组是可以一次存放多个值的变量,数组的组织形式如同表格一样。下面以电子表格为例。一个电子表格就像一个二维数组一样。它是由行和列组成的,根据行和列的地址可以在电子表格里标识每一个独立单元的位置。数组也是以这种方式工作的。数组中的单元叫做元素,并且每个元素中含有数据。使用一种叫做索引或是下标的地址就可以访问一个独立的数组元素。
大多数的程序设计语言支持多维数组。电子表格就是多维数组的一个实例,该数组是由宽度和高度两个维度组成的二维数组。尽管最经常使用的是二维和三维数组,但是很多语言支持任意维数的数组。
bash中的数组是一维的。可以将它想象成只有一列的电子表格。尽管有这个限制,但是它们还是有很多的用处。
命名数组变量同命名其他bash变量一样,当访问数组变量时可以自动创建它们。实例如下:
这里我们看到的是赋值和访问数组元素的例子。特别要注意的是在第二条命令中使用花括号是为了阻止shell在数组元素名里试图扩展路径名。
同时,使用declare命令也可以创建数组,如下所示:
declare -a a
这是使用选项-a和declare创建数组a的实例。
赋值的方式可以有两种。使用下面的语法可以赋单一值。
name[subscript]=value
这里的name是数组名,并且subscript是大于或等于0的整数(或算术表达式)。要注意的是,数组的第一个元素是0,而不是1。value是赋给数组元素的字符串或是整数。
使用下面的语法可以赋多个值。
name=(value1 value2...)
这里的name是数组名,并且将value1 value2...等值依次赋予从元素0开始的数组元素。例如,如果想要将一星期中天数的缩写赋给数组days,那么我们可以像下面这样赋值。
days=(Mon Tue Wed Thu Fri Sat Sun)
也可以通过为每个值指定一个下标来给指定元素赋值也是可行的。
days=([0]=Mon [1]=Tue [2]=Wed [3]=Thu [4]=Fri [5]=Sat [6]=Sun)
有很多常见的数组操作。比如删除数组、确定数组大小和排序等在脚本中有很多应用。
我们可以使用下标“*”和“@”来访问数组中的每个元素。对于定位参数来讲,符号“@”较之更有用。例证如下:
我们创建了数组animals,并使用3个双单词字符串为其赋值,然后执行4个循环以便观察单词拆分对数组内容的影响。如果对符号${animals[*]}和${animals[@]}加以引用,就会得到不同的结果。符号“*”将数组所有内容放在一个字中,而符号“@”将数组所有内容使用3个字来显示数组的真实内容。
原文:http://www.cnblogs.com/jplatformx/p/4361255.html