1、数组定义

1.1 declare定义

使用declare -a 命令定义数组(数组的索引是从0开始计数的),接下来就可以通过[]操作符为不同索引位置的元素赋值。

declare -a names

names[0]=tom

names[1]=jack

注意:shell变量是弱类型的,比要求数组中元素类型相同

在定义数组的同时,可以同时赋值,用()表示,各元素之间用空格隔开

#定义的同时直接赋值

declare -a names=(tom jack)

#增加元素

names[2]=sue

1.2直接定义

创建数组最简单的方法是使用()直接定义数组,括号中元素用空格隔开;在括号中也可以声明下标。实例:

#使用()直接数组

days1=(one two three four five)

#或者在()中声明下标,默认从0开始

days2=([0]=’one’ [1]=’two’ [2]=’three’ [3]=’four’)

#下标可以不连续

days3=([0]=’one’ [2]=’three’)

1.3带下标定义

使用[]操作符,为每一个指定下标赋值,下标也可以不连续

header[0]=’user’

header[1]=’pid’

header[2]=’%CPU’

header[3]=’%MEM’

1.4从文件读取数组

days=(`cat days.txt`)

2、数组操作

2.1赋值

指定下标,使用[]操作符为元素赋值,当下标不存在时,相当于为数组增加元素

declare -a names

names[0]=tom

2.2取值

指定下标,使用[]操作符从数组中对应元素,然后使用$取值,格式:${数组名[索引]}

days=(one two three four five)

#取出第1个元素

echo ${days[0]}

#取出第3个元素

echo ${days[2]}

获得数组中所有值:${数组名[@]}、${数组名[*]}

${数组名[@]}得到是以空格隔开的元素,可以用在数组遍历中;${数组名[*]}得到的是一整个字符串。

注意:${数组名}并不会获得所有值,它只会获得到第一个元素的值。即${数组名}等价于${数组名[0]}

示例:

#!/bin/bash

#数组取值

days=(one two three four)

echo ${days}

echo ${days[0]}

echo ${days[1]}

echo ${days[@]}

echo ${days[*]}

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

names=()

names[1]=tom

names[2]=jack

echo ${names}

echo ${names[1]}

echo ${names[@]}

结果:

2.3长度

利用”@”或“*”字符,将数组扩展成列表,然后使用”#”来获取数组元素的个数。

示例:

#!/bin/bash

#数组个数

days=(one two three four)

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

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

names=()

names[1]=tom

names[2]=jack

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

结果:

注意:如果某个元素是字符串,可以通过制定索引的方式获得该元素的长度。

2.4遍历

存在以下三种方式:

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

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

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

示例:

#!/bin/bash

#数组遍历

days=(one two three four)

#for循环遍历

for day in ${days[*]} #或${days[@]}

do

echo $day

done

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

#fou循环带下标遍历

for i in ${!days[@]}

do

echo ${days[$i]}

done

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

#while循环

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

names[1]=tom

names[2]=jack

i=0

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

do

echo ${names[$i]}

let i++

done

结果:

2.5删除

删除一个数组或数组中元素用unset命令。

unset 数组名[索引]      #删除索引下的元素

unset 数组名         #删除整个数组

2.6连接

用()将多个数组连接在一起,()中各个数组用空格隔开。

days=(one two three four)

names=(tom jack)

days=(${days[@]} ${names[@]})

for循环下标 shell_Shell数组操作 带下标遍历相关推荐

  1. LeetCode简单题之寻找数组的中心下标

    题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和. 如果中心下标位于数组最左端,那么左侧数之和视为 0 ...

  2. LEETCODE | PYTHON | 724 | 寻找数组的中心下标

    LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...

  3. python索引例子_Python实现带下标索引的遍历操作示例

    本文实例讲述了Python实现带下标索引的遍历操作.分享给大家供大家参考,具体如下: 代码如下: #coding=utf-8 #python - 实现带下标索引的遍历. str = 'abcdefgh ...

  4. C语言数组带下标赋值

    好记性不如烂笔头. c语言数组带下标赋值,初始化的时候数组元素的值不受顺序影响,在有些时候方便扩展一幕了然. int array[3] = { 1, 2, 3 }; /* 等同于 */ int arr ...

  5. 增加数组下标_数组以及ArrayList源码解析

    点击上方"码之初"关注,···选择"设为星标" 与精品技术文章不期而遇 前言 前一篇我们对数据结构有了个整体的概念上的了解,没看过的小伙伴们可以看我的上篇文章: ...

  6. php中数组下标,PHP数组介绍_php

    数组基础: php中,数组的下标可以整数,也可以是字符串 php中,数组的元素顺序不是由下标决定,而是由其"加入"的顺序决定 定义: $arr1 = array(元素1,元素2,. ...

  7. Java数组基础使用下标、遍历、存取与本质

    Java数组 一.创建数组的格式 二.数组下标 三.存放数组元素 四.取出数组元素 五.二维数组等多维数组 \qquad 遍历二维数组 一.创建数组的格式: 数组所需要存储的数据类型[ ] 数组对象变 ...

  8. php 之循环、数组操作函数

    php for循环数组 <?php$num = array(1,2,3,4,5,6,7,8,9,10);for($i = 0 ; $i < count($num) ; $i++){echo ...

  9. js 取得数组下标_数组的介绍及使用

    JavaScript 中的数组常用于在单个变量中存储多个值.数组就是一组数据的集合,在内存中表现为一段连续的内存地址(保存在堆内存).创建数组的目的就是为了保存更多的数据. 数组概念和语法 概念:数组 ...

  10. 下标要求数组或指针类型_算法一看就懂之「 数组与链表 」

    数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功.大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多. 其实也不是真的用得少,只不过我们在 ...

最新文章

  1. Spring 源码分析(四) ——MVC(一)Web 基础
  2. python常见错误-Python错误及异常总结汇总
  3. Gulp构建Angularjs应用
  4. java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...
  5. Django引入静态文件
  6. matlab两个单引号是什么意思,两个单引号什么时候用
  7. 完美解决win10家庭版本系统无法远程连接问题
  8. 257套工业机器人SW设计3D图纸 焊接机械手/发那科ABB安川臂模型
  9. Trister Community DAOs最新型DAO架构
  10. 【win10系统重装】
  11. 免费赠送20个帆布包和2个咖啡杯活动规则必看(会搜索+复制粘贴就行)
  12. 【操作系统】CSAPP学习笔记
  13. ATUO CAD 如何延伸线段?
  14. 【项目】多部门数据对接
  15. 最长上升子序列(LIS)问题的解决及优化
  16. 高效持续交付的7大原则
  17. 2D骨骼动画工具Sprite Studio使用教程
  18. 详解编码器和解码器电路:定义,工作原理,应用,真值表
  19. 移动端字体大小单位rem
  20. 安卓 网络工具_安卓设备可用苹果Magsafe无线充电,但功率鸡肋,安卓并不需要...

热门文章

  1. enfuzion与lsf构建渲染集群_集群渲染系统构建及优化
  2. 4G模块 EC03-DNC的常用AT指令操作及模块访问内网方法
  3. docker打包镜像上传_docker制作自己的镜像并上传dockerhub
  4. UE4 通过蓝图实现蓝图接口
  5. VIRTIO-BLK设备SERIAL ID
  6. GBase 8a集群运行报错BLK_TEMP: return NULL in alloc
  7. 3D (Input) Sparse Convolution
  8. simpson公式matlab实现,数值分析复化梯形公式复化Simpson公式MATLAB程序
  9. 应届生求职面试真的有那么难吗
  10. 激荡20年的百度帝国,曾经的王者为何从BAT掉队?到底发生了什么?