2020-04-09 linux数组

1.数组定义

$ a=(1 2 3 4 5 6)
$ echo $a
1

注意:数组元素用空格分隔,=两边不要空格,echo $a 只返回数组第一个元素

2.数组读取与赋值

2.1 获取数组长度

$ echo ${#a[@]}
6

用${#数组名[@或*]} 可以得到数组长度

2.2 获取数组元素

$ echo ${a[0]}
1
$ echo ${a[*]}
1 2 3 4 5 6

注意:下标是*或@表示获取全部元素

2.3赋值

$ a[1]=11
$ a[3]=33
$ echo ${a[@]}
1 11 2 33 4 5 6

注意:如果下标不存在,自动添加新一个数组元素,

2.4删除元素

$ a=(1 2 3 4 5)
$ unset a
$ echo ${a[*]}
$ a=(1 2 3 4 5)
$ unset a[1]
$ echo ${a[*]}
1 3 4 5
$ echo ${#a[*]}
4

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。

 3.特殊使用

3.1分片

$ a=(1 2 3 4 5)
$ echo ${a[*]:1:3}
2 3 4
$ b=(${a[*]:2:9})
$ echo ${b[*]}
3 4 5
$ c = ${a[*]:2:9}
$ echo $c
3 4 5

直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:b就是一个新数组,而c是一个字符串

注意:指定的长度如果大于数组本身,只会取到数组最后一个元素,也不会出错

3.2替换

$ a=(1 2 3 4 5)
$ echo ${a[*]/3/33}
1 2 33 4 5
$ echo ${a[*]}
1 2 3 4 5
$ a=(${a[*]/3/33})
$ echo ${a[*]}
1 2 33 4 5

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容

注意:替换有一个比较迷的操作

$ a=(12 222 345)
$ echo ${a[*]/2/88}
188 8822 345
$ b=(${a[*]/2/88})
$ echo {b[*]}
188 8822 345
$ echo ${b[*]/2/88}
188 88882 345
这里把每一个元素里都查找一遍再替换,并且只替换一次,比如a[2]中222,就只替换一次变成8822,

猜你喜欢

转载自www.cnblogs.com/cxl-blog/p/12670263.html