Bash : 索引数组
Bash 提供了两种类型的数组,分别是索引数组(indexed array)和关联数组(associative array)。本文主要介绍索引数组的基本用法。
索引数组的基本特点
Bash 提供的数组都是一维数组。
任何变量都可以用作索引数组。
通过 declare 关键字可以显式的声明一个索引数组。
数组的大小是不受限制的。
索引数组的元素的索引不必是连续的。
通过从零开始的整数引用数组元素。
除非另外注明,索引数组必须使用非负的整数索引元素。
自动创建索引数组
通过赋值语句可以隐式的创建索引数组:
$ myArr[0]=apple
通过给索引为 0 的元素赋值,变量 myArr 会被初始化成一个索引数组。
当然也可以这样:
$ myArr[3]=orange
不用必须从索引 0 开始赋值。
显式声明一个索引数组
通过 declare 关键字和 -a 选项可以显式的声明索引数组:
$ declare -a myArr
然后进行初始化:
$ myArr=(apple orange pear)
也可以在声明的时候进行初始化:
$ declare -a myArr=(apple orange pear)
或者在声明后只初始化某个元素:
$ myArr[0]=grape
引用数组元素
引用数组元素稍微麻烦些,不仅要指定元素的索引位置,还需要使用 ${} 符号。请注意,索引数组的下标从 0 开始,且不能为负数(真希望所有编程语言中的数组元素都从 0 开始索引!)。
$ myArr[0]=apple $ echo ${myArr[0]}
如果不小心引用了没有赋值的元素呢?不用担心,这里没有程序崩溃的问题,只不过没有输出内容而已:
我们还可以轻松的输出数组的全部元素:
$ declare -a myArr=(apple orange pear) $ myArr[10]=grape $ echo ${myArr[@]}
第四个元素的索引是不连续的。我们可以获取到所有已经赋值元素的下标进行查看:
$ echo ${!myArr[@]}
变量也可以用来索引数组元素:
$ declare -a myArr=(apple orange pear) $ i=2$ echo ${myArr[$i]}
对于索引数组,如果你不按规矩引用数组元素可能产生一些诡异的状况。比如,用一个字符串代替非负的整数去索引元素会发生什么?
$ declare -a myArr=(apple orange pear) $ echo ${myArr[hello]}
这往往不是你想要的结果。实际上,无论你写什么样的字符串,都会被当做 0 来处理。
添加数组元素
比较常见的数组操作是在数组的尾部添加新的元素(严谨点说,这应该是队列的一个特征!):
$ declare -a myArr=(apple orange pear) $ myArr=("${myArr[@]}" grape) $ echo ${myArr[@]}
请注意最后一行的输出,这样添加的元素的索引是连续的。
把两个数组连接成一个也是比较常见的操作:
$ declare -a myAbc=(a b c) $ myArr=("${myArr[@]}" "${myAbc[@]}") $ echo ${myArr[@]}
提取子数组
提取部分数组元素:
$ declare -a myArr=(a b c d e f g) $ echo ${myArr[@]:2:3}
数组的长度
在 Bash 中,引用数组长度的语法多少有些奇特:
$ declare -a myArr=(apple orange pear) $ echo ${#myArr[@]}
数组长度是指被赋值了的元素个数:
$ myArr[10]=grape $ echo ${#myArr[@]}
我们还可以获取到某个元素的长度:
哈哈,看起来有些像二维数组了!
遍历数组元素
通过 for 语句可以像其它编程语言那样遍历数组中的元素:
$ declare -a myArr=(apple orange pear) $ myArr[10]=grape $ for element in "${myArr[@]}"; do echo $element done
删除数组元素
$ declare -a myArr=(apple orange pear) $ unset myArr[1] $ echo ${myArr[1]}
索引为 1 的元素已经为空了,其实数组的长度也发生了变化:
$ echo ${#myArr[@]}
此时数组的长度已经变成了 2。
下面来个复杂点的:
$ declare -a myArr=(a b c d e f) $ myArr=("${myArr[@]:0:3}" "${myArr[@]:4}")
上面的代码移除了元素 d:
清空数组
$ declare -a myArr=(apple orange pear) $ unset myArr $ echo ${myArr[@]}
Bash : 索引数组相关推荐
- 如何在 bash 中使用索引数组
数组是一种数据结构,表示具有相同数据类型的对象集合.bash shell中支持两种类型的数组:关联数组或索引数组.在本文中,将演示如何在 bash 中使用索引数组.以下使用 shell 示例来说明索引 ...
- php索引数组转键数组,php索引数组和关联数组
这篇文章主要介绍的内容是关于php索引数组和关联数组,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 最近遇到个bug,记录一下//定义一个数组 $arr = Array('a','b' ...
- 14.索引数组初始化
PHP有两种数组:索引数组.关联数组. 索引和关联两个词都是针对数组的键而言的. 先介绍下索引数组,索引数组是指数组的键是整数的数组,并且键的整数顺序是从0开始,依次类推. 下面使用图来说明一下: 可 ...
- PHP索引数组关联数组
https://blog.csdn.net/qq_32849999/article/details/80290240 区分 索引数组:索引值是数字的 从0增加的 自动化的 关联数组:键值是字符串 人 ...
- PHP索引数组+unset使用不当导致的问题
转自先知社区 https://xz.aliyun.com/t/2443 0x00前言 通常网站后台可以配置允许上传附件的文件类型,一般登录后台,添加php类型即可上传php文件getshell.但是, ...
- [Leetcode][第315题][JAVA][计算右侧小于当前元素的个数][暴力][归并排序+索引数组]
[问题描述][中等] [解答思路] 1. 暴力 (超时) 时间复杂度:O(N^2) 空间复杂度:O(1) public List<Integer> countSmaller(int[] n ...
- PHP重建索引数组的键值
sort() array_merge()跟一个空数组合并都可以重建索引数组的键值
- php中的索引数组和关联数组
项目开发中和前端人员关于传输数据的格式产生分歧,后来耗费了2小时,搞懂了一直以来的疑惑..都是泪 php中的索引数组是指以数字为键的数组.并且这个键值 是自增的 关联数组指的是一个键值对应一个值,并 ...
- PHP 索引数组合并
PHP数组合并的方式分两种,一种是使用函数array_merge ,另一种是直接使用"+"号. 但是在不同的索引数组中也会产生不同的结果. 1. 不指定数组下标 array_mer ...
最新文章
- 中国开源大爆发进行时,你没掉队吧?
- 寻找丢失的数字(二)
- 多重循环练习之九九乘法表
- java中有界队列的饱和策略(reject policy)
- mysql php 迁移_MySQL数据复制、迁移、转换
- Navicat15安装笔记
- winform判断线程有没有完成_并发编程系列1:线程池的架构实现、大小配置、及四种线程池使用...
- vs2005常用的调试方法
- 搞定使用MySQL导入外部的SQL文件执行
- python 强类型 弱类型_强类型、弱类型
- STL之partial_sum
- java web乱码问题_Java Web中文乱码问题解决
- statfs函数获取大容量磁盘信息速度慢的解决过程
- seconds_behind_master入门
- DOS命令大全(经典收藏)【运行CMD后的命令】
- 用计算机亩换算成平方,平方换算成亩怎么算(平方米换算亩计算器)
- PDF转word的两种办法
- 跟着项目学设计模式(六):三层架构
- 适配ipad Pro
- 【HBase】HBase入门详解(二)
热门文章
- elementui vue的html随机点名器软件网页版源码1.1
- linux 测试环境启用jar_Linux下搭建测试环境
- Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法:
- linux centos 7 crontab 启动,CentOS 7 Linux执行crontab 计划任务实操 - 好应网
- 外挂编程-动作模拟技术
- AIgorand的相关学习参考链接
- Java JUC工具类--CyclicBarrier
- SpringBoot —— Bean的注入方式
- MAC查找JDK的路径
- 真实股市房市信托本质,金融故事三则:钱都去哪儿了?