Shell数组
docker>Evan2017年2月14日 (二) 06:45的版本
1定义
直接用圆括号包数组元素包起来,数组元素之间用空格隔开就行了,bash支持一维数组(不支持多维数组) 定义数组的一般形式为: array_name=(value1 ... valuen) 或者 array_name=( value0 value1 value2 value3 ) evan@evanpc:~$ a=(1 2 3 4 5 ) evan@evanpc:~$ echo $a
2.数组读取与赋值
数组长度 用${#数组名[@或*]} 可以得到数组长度 evan@evanpc:~$ echo ${#a[@]} 5 读取: 用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容 evan@evanpc:~$ echo ${a[0]} 1 evan@evanpc:~$ echo ${a[2]} 3 evan@evanpc:~$ echo ${a[*]} 1 2 3 4 5 赋值: 直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素 evan@evanpc:~$ a[1]=100 evan@evanpc:~$ echo ${a[*]} 1 100 3 4 5 evan@evanpc:~$ a[6]=100 evan@evanpc:~$ echo ${a[*]} 1 100 3 4 5 100 删除: 直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。 evan@evanpc:~$ a=(1 2 3 4 5 ) evan@evanpc:~$ unset a evan@evanpc:~$ echo ${a[*]} evan@evanpc:~$ a=(1 2 3 4 5 ) evan@evanpc:~$ unset a[1] evan@evanpc:~$ echo ${a[*]} 1 3 4 5 evan@evanpc:~$ echo ${#a[*]} 4
3.特殊使用
分片: 直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,下面例子:c 就是一个新数据。 evan@evanpc:~$ a=(1 2 3 4 5 ) #从0 也就是第一个元素开始,切出3个元素 evan@evanpc:~$ echo ${a[@]:0:3} 1 2 3 evan@evanpc:~$ echo ${a[@]:1:4} 2 3 4 5 evan@evanpc:~$ c=(${a[@]:1:4}) evan@evanpc:~$ echo ${#c[@]} 4 evan@evanpc:~$ echo ${c[*]} 2 3 4 5 替换: 调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。 evan@evanpc:~$ a=(1 2 3 4 5 ) evan@evanpc:~$ echo ${a[@]/3/100} 1 2 100 4 5 evan@evanpc:~$ echo ${a[@]} 1 2 3 4 5 evan@evanpc:~$ a=(${a[@]/5/500}) evan@evanpc:~$ echo ${a[@]} 1 2 3 4 500 evan@evanpc:~$ 数组的遍历 for data in ${array[@]} do echo ${data} done tar czf ${codefilename} ${baklist_www[@]:0} 2>/dev/null
http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html http://www.tldp.org/LDP/abs/html/ http://c.biancheng.net/cpp/view/7002.html
Shell 数组元素个数${#array[@]} 数组的所有元素${array[*]} 字符串长度${#str} http://zhenshi4597.blog.51cto.com/1891465/871166
[shell] shell数组(array)常用技巧学习实践(数据库备份脚本) http://bbs.linuxtone.org/thread-5317-1-1.html