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,