【Bash百宝箱】shell数组

来源:互联网 发布:淘宝达人的推广方式 编辑:程序博客网 时间:2024/05/16 05:19

shell支持一维数组,包括普通的使用下标的索引数组和关联的键值对数组,下面以例子说明。

创建一个名为foo的索引数组,三个元素a、bear、123以空格分隔放在圆括号内。

$ foo=(a bear 123)

查看索引数组foo的全部元素(使用特殊符号):

$ echo $fooa$ echo ${foo}a$ echo ${foo[@]}a bear 123 echo ${foo[*]}a bear 123

查看索引数组foo的所有下标:

$ echo ${!foo[@]}0 1 2

查看索引数组foo的元素个数:

$ echo ${#foo[@]}3$ echo ${#foo[*]}3

查看索引数组foo某个位置的元素:

$ echo ${foo[0]}a$ echo ${foo[1]}bear$ echo ${foo[2]}123$ echo ${foo[-1]}123$ echo ${foo[-2]}bear$ echo ${foo[-3]}a

修改索引数组foo某个位置的元素:

$ foo[1]=dog$ echo ${foo[1]}dog$ echo ${foo[@]}a dog 123$ echo ${!foo[@]}0 1 2$ echo ${#foo[@]}3

给索引数组foo添加元素:

$ foo[3]=x$ echo ${foo[3]}x$ echo ${foo[@]}a dog 123 x$ echo ${!foo[@]}0 1 2 4$ echo ${#foo[@]}4$ foo[10]=how$ echo ${foo[10]}how$ echo ${foo[@]}a dog 123 x how$ echo ${!foo[@]}0 1 2 3 10$ echo ${#foo[@]}5

删除索引数组foo某个位置的元素:

$ unset foo[1]$ echo ${foo[@]}a 123 x how$ echo ${!foo[@]}0 2 3 10$ echo ${#foo[@]}4

删除索引数组foo:

unset foo

使用命令declare -A创建一个名为bar的键值对数组,三个键分别为r、green、123,对应的值为red、g、88,格式固定,键放在一对方括号中,用等号进行赋值。

$ declare -A bar=([r]=red [green]=g [123]=88)

下面是对键值对数组bar的一些操作:

$ echo ${bar[@]}g 88 red$ echo ${!bar[@]}green 123 r$ echo ${#bar[@]}3$ echo ${bar[r]}red$ echo ${bar[green]}g$ echo ${bar[123]}88$ bar[123]=99$ bar[x]=app$ echo ${bar[*]}g 99 red app$ echo ${!bar[*]}green 123 r x$ echo ${#bar[*]}4$ unset bar[r]$ echo ${bar[*]}g 99 app$ echo ${!bar[*]}green 123 x$ echo ${#bar[*]}3$ unset bar
1 0