引言

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

数组的定义

何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。

数值类型的数组:

  • 一对括号表示数组,数组中元素之间使用“空格”来隔开
  • a=(1 2 3 4 5)

字符串类型数组

  • 使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。
  • a=("abc" "edf" "sss")
  • a=('abc' 'edf' 'sss')

数组的操作

  • 我们使用数值类型数组a=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。
  • 在shell里面想获取自定义变量的值,使用$符开头,但是数组得加花括号{}

获取数组长度

  • echo ${#a[*]}
  • echo ${#a[@]}
  • #格式:${#数组名[@/*]} 可得到数组的长度

读取某个下标的值

  • a=${a[2]}
  • 格式:${数组名[下标]}

读取数组所有得值

  • a=${a[*]}
  • a=${a[@]}
  • 格式:${数组名[*/@]}

对某个下标赋值

  • 如果该下标元素已经存在,会修改该下标的值为新的指定值。
  • 例子:a[2]=100,数组被修改为(1 2 100 4 5)
  • 演示
  • a=(1 2 3 4 5)
  • a[2]=100
  • echo ${a[@]}

  • 如果指定的下标已经超过当前数组的大小,新赋的值被追加到数组的尾部。
  • 例子:a[13]=13,数组被修改为(1 2 100 4 5 13)
  • 演示
  • a[13]=13
  • echo ${a[@]}

删除操作

  • 清除某个元素:unset a[1],这里清除下标为1的数组;
  • 演示
  • a=(1 2 3 4 5)
  • unset a[1]
  • echo ${a[@]}

  • 清空整个数组:unset a
  • 演示
  • unset a
  • echo ${a[@]}

分片访问

  • 格式:${数组名[@或*]:开始下标:取几个}
  • 例子:${a[@]:1:3},这里分片访问从下标为1开始,取3个元素。

元素值替换

  • 格式:${数组名[@或*]/第几个/新值}注意第几个和下标不一样的,下标是从0开始计数;这条命令是将第一个数置换为新值
  • 例子:${a[@]/2/98}

数组的遍历

数组遍历我们使用for语句来演示:

  • for i in ${a[@]}
  •   do
  •     echo $i;
  •   done

Shell系列(38)- 数组操作→取值、遍历、替换、删除的更多相关文章

  1. linux shell 中的数组的取值 遍历 替换 删除操作

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

  2. select2 取值 遍历 设置默认值

    select2 取值 遍历 设置默认值 本章内容主要介绍Select2 的初始化,获取选中值,设置默认值,三个方法.Select2 美化了单选框,复选框和下拉框,特别是下拉框多选的问题.但同时,Sel ...

  3. python数组冒号取值操作

    1.冒号的用法 1.1 一个冒号 a[i:j] 这里的i指起始位置,默认为0:j是终止位置,默认为len(a),在取出数组中的值时就会从数组下标i(包括)一直取到下标j(不包括j) 在一个冒号的情况下 ...

  4. JS子父窗口互相操作取值赋值的方法介绍

    $("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementById ...

  5. Java 中日期的几种常见操作 —— 取值、转换、加减、比较

    Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...

  6. 聊聊 Java 中日期的几种常见操作 —— 取值、转换、加减、比较

    Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...

  7. java从c struct传来的字节数组中取值

    public int getInt(byte[] array,int index) { return (array[index]  & 0xff)  | (array[index + 1] & ...

  8. Json数组对象取值

    1.数据格式 {"data":[{"username":"xxx","avatar":"xxx",& ...

  9. 【freemaker】之文本,html文本,去除空格,字母大小写,循环数组,字符串截取,map取值,遍历map

    测试代码 @Test public void test06(){ try { root.put("emp", "<span color='red'>你好张三& ...

随机推荐

  1. 徒手打造基于Spark的数据工厂(Data Factory):从设计到实现

    在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台.市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计 ...

  2. 《3D打印与工业制造》—— 读书笔记

    <3D打印与工业制造>-- 读书笔记 原创内容,学习不易,转载请注明出处! 一.读后感-- "WOW" ​ 可以这么说,<3D打印与工业制造>这本书是我第一 ...

  3. springboot分页插件的使用

    在springboot工程下的pom.xml中添加依赖 <!--分页 pagehelper --> <dependency> <groupId>com.github ...

  4. C# 二维码生成 ( QRCoder )

    二维码1.前言seaconch 最近在搞二维码方面的一些东西,所以接触了一些二维码相关,那么既然用过了就要有用过了的样子 其实关于二维码的文章真的多的数不胜数,有很多写的很认真,很好,但这就像是学习一 ...

  5. 十九:JDBC操作事务

    二.MySQL数据库中操作事务命令 2.1.开启事务(start transaction) 使用"start transaction"开启MySQL数据库的事务,如下所示:

  6. Mybatis一对一、一对多、多对多查询。+MYSQL

    场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...

  7. 源码解析.Net中DependencyInjection的实现

    前言 笔者的这篇文章和上篇文章思路一样,不注重依赖注入的使用方法,更加注重源码的实现,我尽量的表达清楚内容,让读者能够真正的学到东西.如果有不太清楚依赖注入是什么或怎么在.Net项目中使用的话,请点击 ...

  8. 高德地图&兴趣点(poi)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. 一、Rabbitmq的简单介绍

    以下只是本人从零学习过程的整理 部分内容参考地址:https://www.cnblogs.com/ysocean/p/9240877.html 1.RabbitMQ的概念 RabbitMQ是实现了高级 ...

  10. 致敬mentohust,路由器使用Socket认证华科校园网

    致敬mentohust,路由器使用Socket认证华科校园网 前言: 上一篇文章中,为了解决ESP32华科无线网认证的问题,我成功把网页认证机制用Python+Socket复现.但痛点依然存在,无线网 ...