shell数组详解

shell数组详解参考书籍 LinuxShell 核心编程指南 概述数组是 Shell 的一种特殊变量 是一组数据的集合 里面的每个数据被称为一个数组元素 当前 Bash 仅支持一维索引数组和关联数组 Bash 对数组的大小没有限制 定义数组索引数组第一种方法 array1 0 aarray1 1 barray1 2 c 这会得到一个包含三个元素的数组 array1 第二种方法 array2 abc 元素之间以空格隔开处理数组直接获取元素的值及数组的信息获取单个元素的值 echo array


参考书籍:《Linux Shell核心编程指南》

一、概述

数组是Shell的一种特殊变量,是一组数据的集合,里面的每个数据被称为一个数组元素。

当前Bash仅支持一维索引数组和关联数组,Bash对数组的大小没有限制。

二、定义数组

2.1.索引数组

方法一

array=() #定义一个空数组 array1[0]=a array1[1]=b array1[2]=c 

这会得到一个包含三个元素的数组array1

方法二

array2=(a b c) 

元素之间以空格隔开

2.2.关联数组

关联数组可以使用非数字作为下标,可以是任意字符串

定义一个名为user_info的数组

declare -A user_info user_info[name]=devops user_info[age]=18 或者 user_info=([name]=devops [age]=18) 

注意:在函数外部定义的关联数组为全局变量,在函数内部定义的关联数组为局部变量

多维数组

数组名[索引1][索引2]=值 或者 数组名[索引1,索引2]=

三、处理数组

3.1.直接获取元素的值及数组的信息

1、获取单个元素的值

echo ${array1[0]} #获取第一个元素的值 echo ${array1[-1]} #获取最后一个元素的值 

在这里插入图片描述

2、获取所有元素的值

echo ${array1[*]} 或者用echo ${array1[@]} 

在这里插入图片描述

3、统计数组的长度

echo ${#array1[*]} 

在这里插入图片描述

4、打印数组的下标值

echo ${ 
    !array1[@]} echo ${ 
    !user_info[@]} 

在这里插入图片描述

5、删除数组元素和数组

unset array2[2] #删除索引数组的第三个元素 unset user_info[age] #删除关联数组中索引为age的元素 unset array2 #删除数组 

3.2.使用循环的方式遍历数组

方法一:直接取值

for i in "${array1[@]}" do echo $i done 

方法二:通过下标取值

for i in ${ 
    !array1[@]} do echo ${array1[i]} done 

方法三:C语言风格

for((i=0;i<${#array1[@]};i++)) do echo ${array1[i]} done 

四、$*和$@的区别

4.1.当直接通过echo获取数组所有元素时,它们是一样的效果

在这里插入图片描述

4.2.而在循环中它们就有区别了

在这里插入图片描述

在这里插入图片描述

总结:${array1[*]}会将数组元素视为一个整体,而${array1[@]}将所有数组元素视为独立的个体,推荐使用${array1[@]}

五、技巧

字符串以冒号分隔存入数组

string="12:34:56" array=(${string/:/ }) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198405.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:17
下一篇 2026年3月26日 下午3:18


相关推荐

  • 搭建私人邮件服务器

    搭建私人邮件服务器怎样使用本地服务器搭建一个邮箱,这样就可以脱离qq或者其他企业邮箱的限制,即可以做到节省成本,又可以得到收发邮件的一个保密性。这里我们先展示一下本地搭建邮箱服务器后的成功例子:可以看到,这里qq邮箱收到我这边发送的一个测试邮件例子(特别说明一下,这里的wordcap.top是我自己购买的一个域名)同样qq也可以向我发送邮件:怎样搭建一个属于自己的私人邮箱服务器了,我这里演示一遍:准…

    2022年5月20日
    247
  • java数组转对象_java之数组和对象的互转「建议收藏」

    java数组转对象_java之数组和对象的互转「建议收藏」java*对象转bytes和bytes转对象**@projectorder*@fileNameByteUtil.java*@Description*@authorlight-zhang*@date2019年5月16日*@version1.0.0*/publicclassByteUtil{/***对象转数组**@paramobj*@return*/public…

    2025年10月19日
    7
  • SHFileOperation函数使用的介绍

    SHFileOperation函数使用的介绍今天看到一个关于SHFileOperation函数使用的介绍,发现下面一些有用的资料,都是些之前未仔细了解的方面,这里把他们记录下来,留待以后查阅参考。fFlags成员标志间的关系标志抑制的对话框相关性与优先级FOF_MULTIDESTFILES无无FOF_FILESONLY

    2022年7月18日
    21
  • MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE「建议收藏」

    MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE「建议收藏」本文讲述了如何使用dde23对具有常时滞的DDE(时滞微分方程)方程组求解。方程组为:y1′(t)=y1(t−1)y’_1(t)=y_1(t−1)y1′​(t)=y1​(t−1)y2′(t)=y1(t−1)+y2(t−0.2)y’_2(t)=y_1(t-1)+y_2(t-0.2)y2′​(t)=y1​(t−1)+y2​(t−0.2)y3′(t)=y2(t)y’_3(t)=y_2(t)y3′​(t)=y2​(t).t≤0的历史解函数是常量y1(t)=y2(t)=y3(t)=1y_1(t)=y

    2026年4月17日
    4
  • NodeRed安装与反向代理配置

    NodeRed安装与反向代理配置Node RED 是一个基于浏览器的可视化编程工具 通过简单的托拉拽 就能够简单快速地将硬件设备 API 和在线服务通过 MQTT TCP Websocket HTTP 等组件连接在一起 一览为快 1 安装项目地址 https github com node red node red 安装 sudonpminsta gunsafe permnode red 启动 node

    2026年3月19日
    2
  • 黑盒测试基础[通俗易懂]

    黑盒测试基础[通俗易懂]黑盒测试方法:黑盒测试也称为功能测试和数据驱动测试。它将被测软件视为一个无法打开的黑盒,主要根据功能需求设计测试用例和测试。把产品软件想象成一个只有出口和入口的黑盒。在测试过程中,你只需要知道向黑盒输入什么,知道黑盒会产生什么结果。黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等,主要用于软件验证测试。“黑盒”法侧重于程序的外部结构,不考虑内部逻辑结构,针对测试软件界面和软件功能。“黑盒”方法是详尽的输入测试,只有当所有可能的输入都用作测试条件时,才能以这种方式检测程序中的所有错误。

    2022年10月20日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号