Shell脚本数组操作小结

Linux Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

定义数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:

代码如下:

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

例如:

代码如下:

array_name=(value0 value1 value2 value3)

或者

代码如下:

array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

代码如下:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。

读取数组

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

代码如下:

${数组名[下标]}

例如:

代码如下:

valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如:

代码如下:

echo ${array_name[@]}

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

代码如下:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

附:shell数组小结

不知道 是什么时候写的东西,整理文档时被考古发现,给那些闲着蛋疼之人,一笑而过吧。如果本文中的错误给您带来所有的精神损失,请找保险公司理陪!当然你可以告诉我 (倾诉)

数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,当然bash shell也不例外。本文就shell数组来做一个小的总结。
在这里只讨论一维数组的情况,关于多维数组(事实上,你得用一维数组的方法来模拟),不涉及。这里包括数组的复制,计算,删除,替换。

数组的声明:


代码如下:

array[key]=value # array[0]=one,array[1]=two

declare -a array # array被当作数组名

array=( value1 value2 value3 ... )

array=( [1]=one [2]=two [3]=three ... )

array="one two three" # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身

数组的访问:


代码如下:

${array[key]} # ${array[1]}

数组的删除


代码如下:

unset array[1] # 删除数组中第一个元素

unset array # 删除整个数组

计算数组的长度:


代码如下:

${#array}

${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别

数组的提取

从尾部开始提取:

代码如下:

array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three

子串删除


代码如下:

[root@localhost dev]# echo ${array[@]:0}
one two three four

[root@localhost dev]# echo ${array[@]#t*e} # 左边开始最短的匹配:"t*e",这将匹配到"thre"
one two e four

[root@localhost dev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"

[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )

[root@localhost dev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配
one tw three four

[root@localhost dev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配
one tw three four

子串替换


代码如下:

[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )

第一个匹配到的,会被删除

代码如下:

[root@localhost dev]# echo ${array[@] /o/m}
mne twm three fmur

所有匹配到的,都会被删除

代码如下:

[root@localhost dev]# echo ${array[@] //o/m}
mne twm three fmur

没有指定替换子串,则删除匹配到的子符

代码如下:

[root@localhost dev]# echo ${array[@] //o/}
ne tw three fur

替换字符串前端子串

代码如下:

[root@localhost dev]# echo ${array[@] /#o/k}
kne two three four

替换字符串后端子串

代码如下:

[root@localhost dev]# echo ${array[@] /%o/k}
one twk three four

时间: 2014-07-17

shell数组常用实例分享

说明:shell中数组的下标默认是从0开始的 1.将字符串放在数组中,获取其长度 复制代码 代码如下: #!/bin/bashstr="a b --n d"array=($str)length=${#array[@]}echo $length for ((i=0; i<$length; i++))doecho ${array[$i]}done 执行结果:[oracle@99bill-as9 array]$ sh length.sh4a --nd 2).打印字符串: 复制代码 代码

linux shell数组深入学习理解

bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1    arrya[1]=var2    ...    array[n]=varN 计算数组元素个数:${#

通过实例深入理解linux shell数组

本文为大家介绍linxu shell中数组的相关知识,并举了很多例子供参考,包括数组的复制,计算,删除,替换等,是学习shell 数组的不可多得的好文章. 数组的声明: 1)array[key]=value # array[0]=one,array[1]=two2)declare -a array # array被当作数组名3)array=( value1 value2 value3 ... )4)array=( [1]=one [2]=two [3]=three ... )5)array="o

shell for循环与数组应用介绍

读取一个文件,把每一行赋值给一个数组的变量,然后用for循环打印出来 复制代码 代码如下: #!/bin/shi=1SUM=`sed -n '$=' tmp.txt` #计算文件的总行数echo "$SUM"while read linedo    arr[$i]="$line"    i=`expr $i + 1`done < tmp.txtecho "$i"i=1for i in `seq $SUM` ;do     echo &quo

shell数组操作简明总结

数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,当然bash shell也不例外.本文就shell数组来做一个小的总结. 在这里只讨论一维数组的情况,关于多维数组(事实上,你得用一维数组的方法来模拟),不涉及.这里包括数组的复制,计算,删除,替换. 1.数组的声明: 复制代码 代码如下: 1)array[key]=value # array[0]=one,array[1]=two2)declare -a array # array被当作数组名3)array=( value1 va

PowerShell数组操作简明教程

对于编写程序来讲,离不开数组,PowerShell也不例外.在PowerShell中创建和使用数组是一件前所未有的愉悦的事情,实在是简单.易用得太过分了!呵呵! 1.定义数组 在PowerShell中,所有的变量都无须定义,数组亦如此,所以此步省略. 2.初始化数组 复制代码 代码如下: $arr=1,2,3,'a','b','xx'; 在上面的例子中,洪哥对变量名为$arr的数组进行了初始化.在PowerShell中初始化一个数组就是把所有的数组元素--不管什么类型的,通通赋给它.每个数组元素

shell中的数组操作小结和冒泡排序实现脚本分享

shell数组介绍: 复制代码 代码如下: //数组变量定义: $ arr=(1 3 6 8 2 5 9 0 7 4) // 默认获取第一个元素 $ echo $arr // 通过下标访问,下面取的数组第二个元素,shell数组下标是从0开始 $ echo ${arr[1]}    // 访问整个数组 $ echo ${arr[@]}  or echo ${arr[*]} // 获取数组的长度(最大下标) $ echo ${#arr[@]}  // 获取单个元素字符串长度 $ echo ${#a

Linux Shell 数组建立及使用技巧

linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5) [chengmo@centos5 ~]$ echo $a 一对括号表示是数组,数组元素用"空格"符号分割开. 2.数组读取与赋值 得到长度: [chengmo@centos5 ~]$ echo ${ #a[@]} 用${#数组名

Shell 数组与关联数组详解及实例代码

Shell 数组与关联数组 1.数组 1.1. 数组定义 一对圆括号表示数组,数组元素之间用空格符号分割 xiaosi@Qunar:~$ a=(1 2 3) xiaosi@Qunar:~$ echo $a 1 xiaosi@Qunar:~$ a=("yoona" "lucy" "tom") xiaosi@Qunar:~$ echo $a yoona 1.2. 数组长度,元素,赋值与删除 长度:用${#数组名[@或*]} 可以得到数组长度 xiao

Angular.js中数组操作的方法教程

前言 前端技术的发展是如此之快,各种优秀技术.优秀框架的出现简直让人目不暇接,紧跟时代潮流,学习掌握新知识自然是不敢怠慢.最近在学习Angular.js,将自己学习的一些经验技巧分享给大家,下面本文将给大家介绍关于Angular.js中数组操作的相关资料,话不多说了,来一起看看详细的介绍. 1:ng-click,ng-model,ng-bind,ng-class,ng-hide,ng-app 2:placeholder, 3:{}中加入代码":true|false",使用逗号隔开,可以

JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)

POP 删除最后一项 删除最后一项,并返回删除元素的值:如果数组为空则返回undefine var a = [1,2,3,4,5]; a.pop();//a:[1, 2, 3, 4] a.pop();//a:[1, 2, 3] a.pop();//a:[1, 2] shift 删除第一项 删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefine var a = [1,2,3,4,5]; a.shift(); //a:[2,3,4,5] a.shift(); //a:[3, 4,

JavaScript jQuery 中定义数组与操作及jquery数组操作

首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象 Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1 定义数组 声明有10个元素的数组 复制代码 代码如下: var a = new Array(10); 此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如