Bash编程中的数组-索引数组

数组的类型

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

$

每天进步一点点

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181122G1FYBP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券