引言

在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. SQL injection:Summary ,Overview and Classification

    What is SQL injection (SQLi)? SQL注入是一种web安全漏洞,让攻击者干扰应用程序对其数据库的查询. 它通常使得攻击者查看他们通常无法检索的数据. 这可能包括属于其他用户 ...

  2. 10BASE—T的主要技术特性

    1)数据传输速率10Mbps基带传输 2)每段双绞线最大长度100m 3)一条通路允许连接HUB数4个,最多5段传输介质 4)拓扑结构星型 5)访问控制方式CSMA/CD 6)帧长度可变,最大1518 ...

  3. Python 可变数据类型与不可变数据类型

    浅拷贝和深拷贝 Python数据都是存放到内存中的,Python的数据又分为可变和不可以变 可变数据(修改了值后,不会改变内存地址,修改的值还是指向相同的内存地址) 字典 # 列表是可变 x = [1 ...

  4. ASP.NET Core 修改开源协议为MIT,.NET全平台 MIT协议开源了

    2021年7月23日,.NET开发团队完成了所有的.NET平台的相关框架的MIT协议更改,我们可以通过 https://github.com/dotnet/aspnetcore/issues/1887 ...

  5. C#调用C++ dll中返回值为字符串的函数问题

    C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...

  6. C++ 中的User a, User b=a 和User a, User b, b=a的区别

    #include <iostream>using namespace std;class User{ public: int age; int number; User() { cout ...

  7. C# WCF的POST请求包含Stream及多个参数

    当使用WCF的API的POST请求时,如果参数列表里,除了Stream类型形参,还具有多个形参, 在寄宿过程中会报错: 约定"IService1"中的操作"DoWork& ...

  8. servlet初识servletConfig

    package day09; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...

  9. mac下编译安装grafana

    下载grafana源码 从grafana git 仓库下载指定的分支. 编译后端 我下载的时候,grafana的最新release是7.3.7,其需要安装go 1.15版本 生成可执行文件 进入项目根 ...

  10. C# - 音乐小闹钟_BetaV2.0

    时间:2017-11-21 作者:byzqy  介绍: 虽然上一版本基本实现了闹钟的功能,但是界面.功能.用户体验(简直谈不上体验^_^),以及众多的bug,所以升级,刻不容缓! 还是先看一下Beta ...