linux之shell数组的使用
Posted 永远不要矫情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之shell数组的使用相关的知识,希望对你有一定的参考价值。
在shell中,数组是一种特殊的数据结构。数组中的每一项被称为元素,元素可以通过索引方式取出其值。只支持一维数组,对元素个数没有限制,因为shell变量是弱类型,所以并不要求每个元素都是相同类型。
1.数组定义
1.1使用declare命令定义
- 使用declare命令先定义数组,再初始化。赋值时元素的数据类型不同.数组的索引从0开始,与java相同。
[test@node1 ~]$ declare -a Array1
[test@node1 ~]$ Array1[0]=1
[test@node1 ~]$ Array1[1]='a'
- 使用declare命令定义数组同时初始化,且初始化后还可改变数组大小。注意对所有元素同时初始化时,值之间使用空格。
[test@node1 ~]$ declare -a Array2=(1 'b')
[test@node1 ~]$ Array2[2]='a'
1.2不使用declare命令
不使用declare命令的语法如下:
[test@node1 ~]$ Array3=(1 'b')
还可以给特定的元素赋值,例如:对第5个位置和第10个位置的元素赋值:
[test@node1 ~]$ Array3=([4]=4 [9]=5)
2.数组操作
2.1 数组取值
数组取值的格式为:${数组名[索引]};例如取第2个元素的值
[test@node1 ~]$ test_array=('a' 1 'c' 'd')
[test@node1 ~]$ echo ${test_array[1]}
1
若想取出所有的值,使用以下两种方式:
[test@node1 ~]$ Array1=(1 'a')
[test@node1 ~]$ echo ${Array1[*]}
1 a
[test@node1 ~]$ echo ${Array1[@]}
1 a
从表面上看,两者并没什么区别,但是 A r r a y 1 [ @ ] 得 到 的 是 以 空 格 隔 开 的 元 素 值 ; 而 {Array1[@]}得到的是以空格隔开的元素值;而 Array1[@]得到的是以空格隔开的元素值;而{Array1[*]}输出的是一整个字符串。
2.2 数组长度
数组长度:即数组元素个数。利用"@“或”*“字符,将数组扩展成列表,然后使用”#"来获取数组元素的个数。例如:
[test@node1 ~]$ echo ${#Array1[@]}
2
[test@node1 ~]$ echo ${#Array1[*]}
2
2.3 数组截取
数组截取:截取整个数组或某个元素的一部分。例如:
取出数组的第一个,第二个元素
[test@node1 ~]$ my_array=(1 'a' 'HelloWorld')
[test@node1 ~]$ echo ${my_array[@]:1:2}
a HelloWorld
取出第三个元素从第0个字符开始连续5个字符
[test@node1 ~]$ echo ${my_array[2]:0:5}
Hello
2.4 连接数组
连接数组:若干个数组进行拼接操作
[test@node1 ~]$ Conn=(${Array1[@]} ${my_array[@]})
[test@node1 ~]$ echo ${Conn[@]}
1 a 1 a HelloWorld
2.5 替换数组
替换数组:将数组内某个元素的值进行替换
[test@node1 ~]$ Array1=(1 'a')
[test@node1 ~]$ Array1=(${Array1[@]/a/b})
[test@node1 ~]$ echo ${Array1[@]}
1 b
2.6 取消数组或元素
取消数组或元素使用的命令为unset
[test@node1 ~]$ Array1=(1 'a')
[test@node1 ~]$ unset Array1[1]
[test@node1 ~]$ echo ${Array1[@]}
1
[test@node1 ~]$ unset Array1
[test@node1 ~]$ echo ${Array1[@]}
以上是关于linux之shell数组的使用的主要内容,如果未能解决你的问题,请参考以下文章