数组

和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。

Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和 C++JavaC# 等类似,Shell 数组元素的下标也是从 0 开始计数。

获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。

遗憾的是,常用的 Bash Shell 只支持一维数组,不支持多维数组。一对圆括号表示数组,数组元素之间用空格符号分割

数组定义

root@master:~# arr=(   )   //注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

 root@master:~# echo $arr   //默认输出数组的第一个元素
  1

数组里面可以包含不是同一类型的数据:

root@master:~# arr=(  "my name is yjt")

添加数组元素:

root@master:~# arr[]=
root@master:~# echo ${arr[]}

给特定的元素赋值

root@master:~# arr1=([]= []= []=)
root@master:~# echo ${arr1[]}

数组长度、元素与删除

获取数组元素:用${数组名[下标]} 得到数组元素(下标从0开始), 下标为*或者@得到整个数组内容

语法格式:${array_name[index]}
其中,array_name 是数组名,index 是下标
示例如下:
root@master:~# echo ${arr1[]} //获取单个元素 root@master:~# echo ${arr1[*]} //获取所有元素
6

root@master:~# echo ${arr1[@]}
  2 4 6

删除:通过unset数组[下标]可以清除相应的元素,不带下标则清除全部数据

root@master:~# echo ${arr1[]}

root@master:~# unset arr1[]
root@master:~# echo ${arr1[]} root@master:~# unset arr1
root@master:~# echo ${arr1[*]}

长度:用${#数组名[@或*]} 可以得到数组长度

root@master:~# arr=(  )
root@master:~# echo ${#arr[*]}

获取数组元素的范围

直接通过 ${数组名[@或*]:起始位置:长度} 获取数组给定范围内元素,返回字符串,中间用空格分开

root@master:~# echo ${arr[*]::}
3

root@master:~# echo ${arr[@]:1:2}
  2 3

 

替换

${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子

root@master:~# echo ${arr[*]}

root@master:~# echo ${arr[*]//}
  

关联数组

Bash支持关联数组,它可以使用字符串作为数组索引,有时候采用字符串索引更容易理解。

定义关联数组

声明某个变量为关联数组

root@master:~# declare -A arr_test

将元素添加到关联数组‘

方法一:利用内嵌索引-值列表的方法
root@master:~# declare -A arr_test
root@master:~# arr_test=([name]=yjt [age]=)
方法二:使用独立的索引-值进行赋值

root@master:~# declare -A arr_test1
  root@master:~# arr_test1[name]=yjt
  root@master:~# arr_test1[age]=22

列出数组索引

每一个数组都有一个索引用于查找。使用${!数组名[@或者*]}获取数组的索引列表

root@master:~# echo ${arr_test[*]}
yjt
root@master:~# echo ${!arr_test[*]}
name age

获取所有的键值对

#!/bin/bash
declare -A arr_yjt
arr_yjt=([name]=yjt [age]=)
for key in ${!arr_yjt[*]}
do
echo "$key ---> ${arr_yjt[$key]}"
done

保存文件到yjt.sh

执行脚本文件:

root@master:~# bash  yjt.sh
name ---> yjt
age --->

Linux 之数组的更多相关文章

  1. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  2. linux C 数组操作

    /****************************************************************** * linux C 数组操作 * 声明: * 本文为解决陈颖奇遇 ...

  3. Linux 中数组的使用

    Linux中数组本人可能用的相对较少,但是会经常遇见,也容易忘记,就顺便记录下来吧 数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开 arr=(1 2 3 4 5) 字符串类型数组: ...

  4. linux C 数组与指针

    linux C 数组与指针 一.数组 数组是同一数据类型的一组值:属于引用类型,因此数组存放在堆内存中:数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段进行. 定义一维数组的一般格式 ...

  5. 转:linux shell 数组建立及使用技巧

    linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  6. 转载-Linux Shell 数组建立及使用技巧

    转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 如侵犯版权,请联系我删除 linux shell在编程方面比win ...

  7. linux shell 数组建立及使用技巧

    参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...

  8. linux shell 数组的使用

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  9. Linux Shell 数组

    shell 数组一般都是一维数组. 1. 数组的声明 declare -a arr 该命令将声明一个数组arr,实际上不声明也可以直接定义数组. 2. 数组的初始化 arr=(1 2 3):该命令定义 ...

  10. linux shell数组

    from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...

随机推荐

  1. Linux 下 maven 的下载、上传与安装

    要运行maven,必须要有 JDK ,maven 是由 Java 语言编写的 一.JDK 的安装 ORACLE 官网下载JDK jdk-8u231-linux-x64.tar.gz 上传 JDK 至 ...

  2. Django:必会ORM查

    1.ORM常用字段 在models.py,创建表中字段 1.1AutoField 自增的整形字段,必填参数primary_key=True,则成为数据库的主键.无该字段时,django自动创建.一个m ...

  3. nginx mirror/post_action+gor实现https流量复制

    关于gor: 参考: https://www.cnblogs.com/jinjiangongzuoshi/p/11773070.html https://github.com/buger/gorepl ...

  4. git小结-ms

    目录 1.git是什么 2.git怎么工作的 3.git常用命令 4.git提效工具 5.git的技术用语 1.git是什么 git是开源的分布式的版本控制系统,可以有效.高速地处理的项目版本管理.g ...

  5. 用c#监控网络流量

    using System; using System.Text; using System.Net; using System.Net.Sockets; using System.Runtime.In ...

  6. LAMP环境搭建基本步骤

    LAMP环境搭建基本步骤 参考链接https://yq.aliyun.com/articles/106387 apache性能优化.配置https://my.oschina.net/lockupme/ ...

  7. linux ssh_config和sshd_config配置文件学习

    在远程管理linux系统基本上都要使用到ssh,原因很简单:telnet.FTP等传输方式是‍以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险.SSH(Secure Shell)目前较可 ...

  8. JavaScript类型转换总结与常见情况解析

    类型转换是将值从一种类型转换为另一种类型的过程(比如字符串转数字,对象转布尔值等) 一.类型转换的分类 类型转换可以分为隐式类型转换和显式类型转换. 二者的区别显而易见:我们能够从代码中看出哪些地方是 ...

  9. Range与面向对象的Kotlin

    在上一次https://www.cnblogs.com/webor2006/p/11186089.html中已经用到了范围相关的东东了,如下: 所以这次专门针对Koltin范围相关的东东再来细学一下, ...

  10. Django解析器

    1.什么是解析器? 对请求的数据进行解析-请求体进行解析.解析器在你不拿请求体数据时,不会被调用. 安装与使用:(官方文档) https://www.django-rest-framework.org ...