数组的类型
Bash提供了2种数组类型,索引(indexed)和关联(associative)数组。索引数组(下标从0开始)较常用,下面是其的使用。
数组的创建
通过shell内建命令declare显式创建,declare -a array_name;或通过直接给数组元素赋值创建,array_name[subscript]=value。
示例如下:
$ declare -a array_name
或
$ array_name[0]="a"
数组的初始化
可通过array_name=(value1 ... valuen)方式进行,其中value形式为[subscript]=string。也可通过array_name[subscript]=string,下标加1逐个元素初始化。
示例如下:
$ array_name=([0]="a" [1]="bb" [2]="ccc" [3]="dddd")
该方式还可简化成,array_name=("a" "bb" "ccc" "dddd")。
两者有些许细微的差别,前者可指定下标;后者下标从0开始,且连续的。
或
$ array_name[0]="a"
$ array_name[1]="bb"
$ array_name[2]="ccc"
$ array_name[3]="dddd"
数组的访问
通过$访问数组元素。
示例如下:
$ echo $
bb
若subscript是@和*,其代表了数组的所有元素。
示例如下:
$ echo $
a bb ccc dddd
$ echo $
a bb ccc dddd
但,要注意两者在双引号中时,表现的不同。
$ for i in "$"; do echo $.tail; done
a.tail
bb.tail
ccc.tail
dddd.tail
$ for i in "$"; do echo $.tail; done
a bb ccc dddd.tail
通过${#array_name[@]},或${#array_name[*]}获取数组的长度;通过${#array_name[subscript]}获取数组元素的长度。
示例如下:
$ echo ${#array_name[@]}
4
$ echo ${#array_name[*]}
4
$ echo ${#array_name[2]}
3
$ echo ${#array_name[3]}
4
知道了数组的长度,还可以通过第二种for循环访问数组元素。
$ for((i=0;i
a
bb
ccc
dddd
数组的删除
使用内建命令unset,unset array_name删除数组;unset array_name[subscript]删除数组元素。
示例如下:
$ unset array_name[2]
如果再访问到该元素时,显示为空行,其表示元素为unset状态。
$ echo $
$
在数组元素有删除的情况下,可能又不知道原始数组的长度,只能通过第一种for循环访问数组。
$ for i in "$"; do echo $i; done
a
bb
dddd
若知道原始数组的长度为4,也能使用第二种for循环,只是可能要过滤掉unset状态的元素(如何实现呢?)。
$ for((i=0;i
a
bb
dddd
$
每天进步一点点
领取专属 10元无门槛券
私享最新 技术干货