shell数组最多能当多少元素_和即将用到Shell的人们谈谈Shell数组

8ff92ebdb8a184e2fd1a589e8048dc24.png

在Linux平台上工作,经常需要使用shell来编写一些有用、有意义的脚本程序。有时,会经常使用shell数组。那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?

数组的定义

何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合,不包括有一些编程语言提出来的关联数组的概念。那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。

数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开。

数组中可以存放多个值。Bash Shell 只支持一维数组,不支持多维数组,初始化时不需要定义数组大小,这与 PHP 类似。与大部分编程语言类似,数组元素的下标由0开始。

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 ... valuen)

实例

#!/bin/bash

# author:Agile Tao

agile_array=(A B "C" D)

我们也可以使用下标来定义数组:

如果该下标元素已经存在, 则会修改该下标的值为新的指定值。

如果指定的下标已经超过当前数组的大小,则新赋的值被追加到数组的尾部。

array_name[0]=value0

array_name[1]=value1

array_name[2]=value2

读取数组

读取数组元素值的一般格式是:

${array_name[index]}

实例

#!/bin/bash

# author:Agile Tao

agile_array=(A B "C" D)

echo "第一个元素为: ${agile_array[0]}"

echo "第二个元素为: ${agile_array[1]}"

echo "第三个元素为: ${agile_array[2]}"

echo "第四个元素为: ${agile_array[3]}"

$ chmod +x first.sh

$ ./first.sh

执行脚本后,输出结果如下所示:

第一个元素为: A

第二个元素为: B

第三个元素为: C

第四个元素为: D

获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:

#!/bin/bash

# author:Agile Tao

agile_array[0]=A

agile_array[1]=B

agile_array[2]=C

agile_array[3]=D

echo "数组的元素为: ${agile_array[*]}"

echo "数组的元素为: ${agile_array[@]}"

$ chmod +x first.sh

$ ./first.sh

执行脚本后,输出结果如下所示:

数组的元素为: A B C D

数组的元素为: A B C D

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,arr_length=${#agile_array[*]}或${#agile_array[@]}均可,即形式:${#数组名[@/*]} 可得到数组的长度。例如:

#!/bin/bash

# author:Agile Tao

agile_array[0]=A

agile_array[1]=B

agile_array[2]=C

agile_array[3]=D

echo "数组元素个数为: ${#agile_array[*]}"

echo "数组元素个数为: ${#agile_array[@]}"

$ chmod +x first.sh

$ ./first.sh

执行脚本后,输出结果如下所示:

数组元素个数为: 4

数组元素个数为: 4

删除操作

清除某个元素:unset agile_array[1],这里清除下标为1的数组;

清空整个数组:unset agile_array;

分片访问

分片访问形式为:${数组名[@或*]:开始下标:结束下标},注意,不包括结束下标元素的值。

例如:${agile_array[@]:1:4},这里分片访问从下标为1开始,元素个数为4。

模式替换

形式为:${数组名[@或*]/模式/新值};

例如:${agile_array[@]/2/98};

数组的遍历

数组遍历存在以下三种方式:

(1)${数组名[@]}、${数组名[@]}均可以获得所有元素(不管是元素列表,还是一整个字符串),使用for循环遍历即可;

(2)带数组下标的遍历,当需要使用到数组的下标时,可以使用${!数组名[@]};

(3)while循环:根据元素的个数遍历,但对于稀疏数组,可能会丢失数据;

示例:

#!/bin/bash

#数组遍历

agile_array=(one two three four)

#for循环遍历

for num in ${agile_array[*]} #或${agile_array[@]}

do

echo $num

done

echo "***************"

#for循环带下标遍历

for i in ${!agile_array[@]}

do

echo ${agile_array[$i]}

done

echo "***************"

#while循环

agile_array=() #数组agile_array是一个稀疏数组

agile_array[1]=tom

agile_array[2]=jack

i=0

while [ $i -lt ${#agile_array[*]} ]

do

echo ${agile_array[$i]}

let i++

done

备注:

1) 可以使用标准的for循环,这种类C语言的方式来遍历数组中的元素;

2) for 元素 in 元素集(数组) 这种类Python的方式来遍历数组;

3)从代码可读性与执行速度来看,推荐使用第二种方式;

结束语

Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便。

Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素大小无约束,也无需先定义数组的元素个数;但其索引则像JAVA/C/Python,从0开始,下面其常用的方式进行总结。

在遍历目录的时候,数组还是比较好用的,而且使用也很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值