Linux 之数组

数组

和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。

Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和 C++JavaC# 等类似,Shell 数组元素的下标也是从 0 开始计数。

获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。

遗憾的是,常用的 Bash Shell 只支持一维数组,不支持多维数组。一对圆括号表示数组,数组元素之间用空格符号分割

数组定义

root@master:~# arr=(1 2 3 4)   //注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

 root@master:~# echo $arr   //默认输出数组的第一个元素
  1

数组里面可以包含不是同一类型的数据:

root@master:~# arr=(1 2 "my name is yjt")

添加数组元素:

root@master:~# arr[5]=1234
root@master:~# echo ${arr[5]}
1234

给特定的元素赋值

root@master:~# arr1=([1]=2 [3]=4 [5]=6)
root@master:~# echo ${arr1[1]}
2

数组长度、元素与删除

获取数组元素:用${数组名[下标]} 得到数组元素(下标从0开始), 下标为*或者@得到整个数组内容

语法格式:${array_name[index]}
其中,array_name 是数组名,index 是下标
示例如下:
root@master:~# echo ${arr1[1]} //获取单个元素 2 root@master:~# echo ${arr1[*]} //获取所有元素 2 4 6

  root@master:~# echo ${arr1[@]}
  2 4 6

删除:通过unset数组[下标]可以清除相应的元素,不带下标则清除全部数据

root@master:~# echo ${arr1[1]}
2
root@master:~# unset arr1[1]
root@master:~# echo ${arr1[1]}

root@master:~# unset arr1
root@master:~# echo ${arr1[*]}

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

root@master:~# arr=(1 2 3)
root@master:~# echo ${#arr[*]}
3

获取数组元素的范围

直接通过 ${数组名[@或*]:起始位置:长度} 获取数组给定范围内元素,返回字符串,中间用空格分开

root@master:~# echo ${arr[*]:1:2}
2 3

  root@master:~# echo ${arr[@]:1:2}
  2 3

 

替换

${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子

root@master:~# echo ${arr[*]}
1 2 3
root@master:~# echo ${arr[*]/1/4}
4 2 3

关联数组

Bash支持关联数组,它可以使用字符串作为数组索引,有时候采用字符串索引更容易理解。

定义关联数组

声明某个变量为关联数组

root@master:~# declare -A arr_test

将元素添加到关联数组‘

方法一:利用内嵌索引-值列表的方法
root@master:~# declare -A arr_test
root@master:~# arr_test=([name]=yjt [age]=22)
方法二:使用独立的索引-值进行赋值

  root@master:~# declare -A arr_test1
  root@master:~# arr_test1[name]=yjt
  root@master:~# arr_test1[age]=22

列出数组索引

每一个数组都有一个索引用于查找。使用${!数组名[@或者*]}获取数组的索引列表

root@master:~# echo ${arr_test[*]}
yjt 22
root@master:~# echo ${!arr_test[*]}
name age

获取所有的键值对

#!/bin/bash
declare -A arr_yjt
arr_yjt=([name]=yjt [age]=22)
for key in ${!arr_yjt[*]}
do
    echo "$key --->  ${arr_yjt[$key]}"
done

保存文件到yjt.sh

执行脚本文件:

root@master:~# bash  yjt.sh 
name --->  yjt
age --->  22

 

posted @ 2019-06-27 10:40  北漂-boy  阅读(1047)  评论(0编辑  收藏  举报