ref:http://www.softfz.com/zxxw/6710/
最近在看Shell脚本编程相关的内容,刚好看到数组这块,相对C数组有很多更灵活的用法,现总结如下:
1、定义数组时,不需要指定数组的长度,可以直接定义数组名然后通过初始化来表明数组的元素个数,初始化时需要注意元素之间是用空格隔开,而不是像
C一样用逗号隔开,元素是放在括号()里,而不是放在{}里面.
array=(1 2 3);
2、不同于C语言的数组,shell脚本中的数组的长度是不固定的,我们往数组中添加元素的时候不需要考虑空间不足的问题,访问数组元素时,就算我们访问的元素不存在,也不会出现像C那样的数组越界问题。
3、如果从C的角度出发,数组中的元素类型应该是一致的,而在shell中,数组中的元素类型可以是不同类型的。即可以将不同类型的变量放在同个数组中
4、在shell中,可以将一个普通变量直接当做只有一个元素的数组来看待,换句话讲,然后我们可以通过[]运算符往数组中添加元素,需要注意的是,如果数组array里面本来就只有一个元素,我们通过array[2]=10;也可以完成元素的添加,问的时候,也要通过array[2]来访问到,但是这时数组中的元素个数还是2个,并非变成3个,所以从这点将,shell中的数组又有点类似于映射,只不过是关键字为整数。
附加数组操作基本方法:
初始化
ary=(1 2 a "ab c") //用括号完成数组初始化,元素之间用空格隔开,如果元素是包含空格的字符串,则把整个字符串放在""之间
求数组元素个数
${#ary[*]}//可以求出数组元素个数,像上面的例子,得到的个数=4
输出数组中的所有元素
${ary[*]}//得到数组中的所有元素
访问数组中的某个元素
${ary[1]}; //访问第二个元素
ary[0]=3; //修改数组中第一个元素的值;
unset ary[0]; //删除数组中的第一个元素,需要注意的是,通过该方法删除掉第二个元素后,原来存在数组中的元素的下标还是不变的,也就是说如果要访问原来的第二个元素,还是通过ary[1]去访问。
ary=2; //这时需要判断之前ary[0]有没有存在,如果存在,则相当于替换,整个数组的元素个数不会发生变化,如果不存在,则相当于增加一个新的元素到数组中,并且该元素对应的下标是0;整个数组的元素个数同时会加1。