bash中的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash中的数组相关的知识,希望对你有一定的参考价值。

在shell中每一个变量名只能存储一个数据,当为这个变量名进行重新赋值的时候,原先的数据就会丢失,所以我们需要数组这个东西。数组可以将很多的数据使用同一个名称进行保存,相当于多个变量的集合,且在取用的时候很方便。接下来我们来说一说数组的赋值和取用的方法。数组分为稠密数组和稀疏数组,稠密数组就是索引编号必须连续,而稀疏数组的索引编号可以不连续,bash数组属于这一类。

  在bash中使用一个数组可以分为两种情况,第一种是先进行声明,然后再使用,第二种是不进行声明,直接使用。声明数组需要用到declare命令,这个命令是声明变量的命令,在这里使用“-a”或“-A”选项来声明数组:

declare -a NAME:将NAME声明为索引数组(如果支持)

declare -A NAME:将NAME声明为关联数组(如果支持)

或者不用声明也可以直接使用(按照从头开始的顺序依次使用的叫做稠密数组,而跳着使用的叫做稀疏数组):

ARRAY_NAME=("value1" "value2" ...)            ——声明稠密数组

a=("123" "234" "345")

ARRAY_NAME=([0]="value1" [1]="value2" [5]="value3" ...)  ——声明稀疏数组

b=([1]="abc" [3]="cde")

赋值还可以像给变量赋值一样

ARRAY_NAME[0]=value1

ARRAY_NAME[1]=value2

...

 ~]$ d[2]=b
 ~]$ echo ${d[*]}
b

在我们为数组赋值之后可以通过“echo ${数组名[一个数字]}”来查看,在中括号中的数字对应着数组中的变量,我们可以用“*”或“@”来将一个数组中的所有数据输出。我们可以像使用变量那样来使用数组,使用的方法是“${ARRAY_NAME[INNDEX]}”。

注意:如果不给出INDEX,则表示引用数组的第一个元素,即INDEX-0的元素


当要引用整个数组的所有元素的时候使用:${ARRAY_NAME[*]}或者${ARRAY_NAME[@]},使用这条命令之后会将数组中的所有元素按照顺序输出。

 ~]$ d[2]=b
 ~]$ d[4]=b
 ~]$ echo ${d[*]}
b b

引用数组的索引,使用:${!ARRAY_NAME[*]}或者${!ARRAY_NAME[@]},当使用这条命令时显示的是在数组中被使用的那些变量的索引,比如下面这个例子中为数组中的第二个和第四个赋值那么显示出来的就是2和4.

 ~]$ d[2]=b
 ~]$ d[4]=b
 ~]$ echo ${!d[*]}
2 4

在有的时候,我们使用数组需要查看数组的长度,就可以使用下面这两个命令,但是统计的是已经保存数据的那些变量,也就是数组中有效元素的个数。

${#ARRAY_NAME[*]}或者${#ARRAY_NAME[@]}

 ~]$ d[2]=b
 ~]$ d[4]=b
 ~]$ echo ${#d[*]}
2
 ~]$ echo ${#d[@]}
2

数组的使用其实和变量几乎相同,对于变量的操作对于数组同样适用,但是在一些重复性的操作中数组能够发挥极其巨大的作用。

以上是关于bash中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将“查找”命令结果存储为 Bash 中的数组

为什么我不能在此片段中生成唯一对象数组?

如何创建片段以重复变量编号中的代码行

为啥此代码片段返回意外结果?

-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory(代码片段

VSCode自定义代码片段—— 数组的响应式方法