Shell系列(38)- 数组操作→取值、遍历、替换、删除
引言
在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)- 数组操作→取值、遍历、替换、删除的更多相关文章
- linux shell 中的数组的取值 遍历 替换 删除操作
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- select2 取值 遍历 设置默认值
select2 取值 遍历 设置默认值 本章内容主要介绍Select2 的初始化,获取选中值,设置默认值,三个方法.Select2 美化了单选框,复选框和下拉框,特别是下拉框多选的问题.但同时,Sel ...
- python数组冒号取值操作
1.冒号的用法 1.1 一个冒号 a[i:j] 这里的i指起始位置,默认为0:j是终止位置,默认为len(a),在取出数组中的值时就会从数组下标i(包括)一直取到下标j(不包括j) 在一个冒号的情况下 ...
- JS子父窗口互相操作取值赋值的方法介绍
$("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementById ...
- Java 中日期的几种常见操作 —— 取值、转换、加减、比较
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...
- 聊聊 Java 中日期的几种常见操作 —— 取值、转换、加减、比较
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...
- java从c struct传来的字节数组中取值
public int getInt(byte[] array,int index) { return (array[index] & 0xff) | (array[index + 1] & ...
- Json数组对象取值
1.数据格式 {"data":[{"username":"xxx","avatar":"xxx",& ...
- 【freemaker】之文本,html文本,去除空格,字母大小写,循环数组,字符串截取,map取值,遍历map
测试代码 @Test public void test06(){ try { root.put("emp", "<span color='red'>你好张三& ...
随机推荐
- murmur3 hash(hash算法)
HashUtil.java package com.example.test.util; import com.google.common.base.Charsets; import com.goog ...
- idea注释
* * $params$ * @author wangxiaolei * @date $date$ $time$ * @return $return$ */ groovyScript("de ...
- 【死磕 Java 基础】— 我同事一个 select 分页语句查出来了 3000W 条数据
大家好,我是大明哥,一个专注于[死磕 Java]系列创作的男人 个人网站:https://www.cmsblogs.com/.专注于 Java 优质系列文章分享,提供一站式 Java 学习资料 某天我 ...
- 接口测试--测试工具:rap2 接口文档解析
通过百度 OCR 工具识别 rap2 登录中的验证码,从而实现登录~那我们今天来实战解析 rap2 的接口数据,生成我们所需要的接口数据 实践上手 文档分析 1.我们先通过 F12 看看哪个接口是我们 ...
- Vue实现在前端导出Excel 方法2
也可以去看下我的方法1:https://www.cnblogs.com/yingyigongzi/p/10915382.html ----------------------------------- ...
- nuxt.js服务端渲染中less的配置和使用
第一步:npm 安装 less 和 less-loader ,文件根目录下安装,指令如下 npm install less less-loader --save-dev 第二步:直接在组件中使用 &l ...
- 【GIS】点图层符号的方向和大小
方向:根据属性字段设置点图层中每个要素的符号方向和大小, 1 所有要素使用同一种符号---简单渲染 在图层属性---符号系统---单一符号中进行设置,首先设置符号,在后面的[高级]选项按钮中分别设置[ ...
- Javascript - Vue - vuex
vuex 这是一个与vue配套的公共数据管理工具,可以将一些需要共享的数据保存到vuex中,以此方便项目中的任何组件都可以从vuex中得到共享数据.cnpm i vuex -S 装包 读取数据 //在 ...
- linux &和&&,|和||
&和&&,|和||区别: & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server & && 表示前一 ...
- redis《三》连接池配置参数
参数 值 setTestWhileIdle() 在空闲时检查有效性 true setMinEvictableIdleTimeMillis() 连接最小空闲时间 1800000L setTimeBetw ...