千家信息网

Bash Shell脚本中数组的使用方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"Bash Shell脚本中数组的使用方法",在日常操作中,相信很多人在Bash Shell脚本中数组的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年10月31日Bash Shell脚本中数组的使用方法

这篇文章主要介绍"Bash Shell脚本中数组的使用方法",在日常操作中,相信很多人在Bash Shell脚本中数组的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Bash Shell脚本中数组的使用方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

数组是一个包含多个值的变量,这些值可以是相同类型或不同类型。没有数组大小限制,也没有要求成员变量被连续索引或连续分配的限制。数组索引从0开始。

1.声明一个数组并赋值

在bash中,使用以下格式的变量时会自动创建数组:

name[index]=value

name 是数组的名字。

index 可以是任何数字或表达式,值必须等于或大于零。

要访问数组元素,请使用大括号,例如${name[index]}。下面是访问Unix数组中的第二个元素,以为数组索引从0开始,所以Unix[1]就是第二个元素了。

[root@localhost ~]# cat arraymanip.sh #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse'  echo ${Unix[1]}

执行脚本,以下是输出内容:

[root@localhost ~]# ./arraymain.sh  Red hat

2.在声明期间初始化数组

不必单独初始化数组的每个元素,可以通过使用括号指定元素列表(由空格分隔)来声明和初始化数组。下面是语法:

declare -a arrayname=(element1 element2 element3)

如果元素具有空格字符,需要使用引号:

[root@localhost ~]# cat arraymain2.sh   #! /bin/bash declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora')  echo ${Unix[4]}

下面是输出结果:

[root@localhost ~]# ./arraymain2.sh  Fedora

declare -a声明一个数组,括号中的所有元素都是数组的元素。

3.打印整个数组

有多种方法可以打印整个数组。如果索引号是 @ 或者 * ,则引用数组的所有成员。可以使用bash shell中的循环语句遍历数组元素并进行打印。

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse'  echo ${Unix[@]}

下面是输出结果:

[root@localhost ~]# ./arraymain.sh  Debian Red hat Ubuntu Suse

4.获取数组的长度

可以使用$和#的特殊参数来获取数组的长度。${#arrayname[@]} 可以获取数组长度。

[root@localhost ~]# cat arraymain2.sh  #! /bin/bash declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora')  echo ${#Unix[@]} #数组中元素的数量 echo ${#Unix}  #数组中第一个元素的字符数。

下面是输出,可以看到第一行输出参数为5个。第二行输出第一个元素的字符数量是6个。

[root@localhost ~]# ./arraymain2.sh  5 6

5.数组中某个元素的长度

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse'  echo ${#Unix[3]} #位于索引3的元素的长度。

以下是输出,可以看到输出index为3的值为"Suse"的字符长度是4。

[root@localhost ~]# ./arraymain.sh  4

6.按数组的偏移量和长度提取

下面的示例显示了从名为Unix的数组中从索引位置3开始提取2个元素的方法。

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux') echo ${Unix[@]:3:2}

以下是输出,

[root@localhost ~]# ./arraymain.sh  Suse Fedora

上面的示例返回第三、第四个索引的值。索引始终以零开头。

7.对于数组的特定元素,使用offset和length提取

从数组元素中仅提取前四个元素。例如,获取数组中的第二个元素,并且获取这个元素的前三个字符:

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')  echo ${Unix[1]:0:3}

以下是输出:

[root@localhost ~]# ./arraymain.sh  Red

8.搜索并替换数组元素

下面的示例在数组中搜索Ubuntu,并将其替换为单词"FreeBSD"。

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')  echo ${Unix[@]/Ubuntu/FreeBSD}

以下是输出:

[root@localhost ~]# ./arraymain.sh  Debian Red hat FreeBSD Suse Fedora UTS OpenLinux [root@localhost ~]#

注意,该数组替换,不会写入到数组里面。

9.向现有的数组添加元素

以下示例显示了将元素添加到现有数组的方法。

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux') Unix=("${Unix[@]}" "AIX" "HP-UX")  echo ${Unix[@]}

以下是输出:

[root@localhost ~]# ./arraymain.sh  Debian Red hat Ubuntu Suse Fedora UTS OpenLinux AIX HP-UX

在名为Unix的数组中,元素" AIX"和" HP-UX"分别添加在第7个索引和第8个索引中。并输出所有数组元素。

10.从数组中删除一个元素

unset用于从数组中删除元素。unset和分配给元素"Null"值具有相同的效果。

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux')  unset Unix[1]  echo ${Unix[@]} echo ${Unix[1]}

以下为输出:

[root@localhost ~]# ./arraymain.sh  Debian Ubuntu Suse Fedora UTS OpenLinux

上面的脚本将打印整个数组,还有索引为"1"的值,索引为"1"的值是null。

以下示例显示了从数组中完全删除元素的一种方法,下面还是删除索引为1的元素。

[root@localhost ~]# cat arraymain.sh  #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux') pos=1 Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))}) echo ${Unix[@]}

以下为输出:

[root@localhost ~]# ./arraymain.sh  Debian Ubuntu Suse Fedora UTS OpenLinux

在此示例中,${Unix[@]:0:$pos}值获取第1个索引的元素,,而${Unix[@]:$(($pos + 1))}将从第3个索引到最后一个索引。并合并以上两个输出。这是从数组中删除元素的解决方法之一。

11.使用正则表达式删除数组中的元素

在搜索条件中,可以给出正则表达式,并将剩余的元素存储到另一个数组中,如下所示。

[root@localhost ~]# cat arraymain2.sh  #! /bin/bash declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora') declare -a pattern=( ${Unix[@]/Red*/} ) echo ${pattern[@]}

以下为输出:

[root@localhost ~]# ./arraymain2.sh  Debian Ubuntu Suse Fedora

上面的示例中删除了包含"Red"字符的元素。实际是将"Red*"替换为空字符。

12.复制数组

以下实例是将Unix数组复制到Linux数组中:

[root@localhost ~]# cat arraymain.sh  #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux') Linux=("${Unix[@]}")  echo ${Linux[@]}

以下为输出:

[root@localhost ~]# ./arraymain.sh  Debian Red hat Ubuntu Suse Fedora UTS OpenLinux

13.两个数组的关联

展开两个数组的元素,然后将其分配给新数组:

[root@localhost ~]# cat arraymain.sh  #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');  UnixShell=("${Unix[@]}" "${Shell[@]}") echo ${UnixShell[@]} echo ${#UnixShell[@]}

以下为输出:

[root@localhost ~]# ./arraymain.sh  Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh 14

该实例同时打印数组" Unix"和" Shell"数组的元素,并且新数组的元素数为14个。

14.删除整个数组

unset用于删除整个数组。

[root@localhost ~]# cat arraymain.sh  #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');  UnixShell=("${Unix[@]}" "${Shell[@]}")  unset UnixShell echo ${#UnixShell[@]}

以下为输出:

[root@localhost ~]# ./arraymain.sh  0

unset数组之后,其长度将为零,如上所示。

15.将文件内容加载到数组中

您可以将文件内容逐行加载到数组中。

[root@localhost ~]# cat loadcontent.sh  #!/bin/bash file=(`cat ./pic.txt`)  for i in "${file[@]}" do echo $i done  echo -e "\033[31m Read file content! \033[0m"

以下为输出:

[root@localhost ~]# ./loadcontent.sh  https://www.linuxprobe.com/wp-content/uploads/2021/01/windows7.png https://www.linuxprobe.com/wp-content/uploads/2016/12/bigdata.jpg https://www.linuxprobe.com/wp-content/uploads/2021/01/write-games-and-learn-python.jpg https://www.linuxprobe.com/wp-content/uploads/2021/01/data-center-inspection.jpg https://www.linuxprobe.com/wp-content/uploads/2020/03/devolop-like-linux-09.jpg  Read file content!

在上面的示例中,使用for循环,逐一显示文件中每行的内容。

到此,关于"Bash Shell脚本中数组的使用方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数组 元素 输出 索引 方法 示例 长度 脚本 字符 面的 使用方法 内容 学习 两个 变量 括号 文件 表达式 分配 搜索 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 广州百单互联网科技有限公司 互联网科技有限公司经营范围 圆梦互联网科技 麻工互联网科技 致骋互联网科技 凡科互联网科技 哈尔滨新华互联网科技 济南和联互联网科技有限公司 深圳前海聚择互联网科技有限公司 重庆威客帮互联网科技 互联网金融科技展 华夏恒生互联网科技013171 西安小鹰速贷互联网科技有限公司 互联网营销推广黑科技 互联网与数字科技关系 吉林省码上互联网科技电话 广西科技产业互联网是什么 银川新华互联网科技学校原画 互联网的黑科技实验室 广州为想互联网科技有限公司 互联网科技活动banner 中正互联网科技招聘 佩信高科技互联网 苏州五指互联网络科技有限 互联网与医疗科技 杭州壁岐互联网科技有限公司 上海乐五互联网科技有限公司 云鲸互联网络科技有限公司 互联网科技创新创业项目
0