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'>你好张三& ...
随机推荐
- SQL injection:Summary ,Overview and Classification
What is SQL injection (SQLi)? SQL注入是一种web安全漏洞,让攻击者干扰应用程序对其数据库的查询. 它通常使得攻击者查看他们通常无法检索的数据. 这可能包括属于其他用户 ...
- 10BASE—T的主要技术特性
1)数据传输速率10Mbps基带传输 2)每段双绞线最大长度100m 3)一条通路允许连接HUB数4个,最多5段传输介质 4)拓扑结构星型 5)访问控制方式CSMA/CD 6)帧长度可变,最大1518 ...
- Python 可变数据类型与不可变数据类型
浅拷贝和深拷贝 Python数据都是存放到内存中的,Python的数据又分为可变和不可以变 可变数据(修改了值后,不会改变内存地址,修改的值还是指向相同的内存地址) 字典 # 列表是可变 x = [1 ...
- ASP.NET Core 修改开源协议为MIT,.NET全平台 MIT协议开源了
2021年7月23日,.NET开发团队完成了所有的.NET平台的相关框架的MIT协议更改,我们可以通过 https://github.com/dotnet/aspnetcore/issues/1887 ...
- C#调用C++ dll中返回值为字符串的函数问题
C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...
- 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 ...
- C# WCF的POST请求包含Stream及多个参数
当使用WCF的API的POST请求时,如果参数列表里,除了Stream类型形参,还具有多个形参, 在寄宿过程中会报错: 约定"IService1"中的操作"DoWork& ...
- servlet初识servletConfig
package day09; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...
- mac下编译安装grafana
下载grafana源码 从grafana git 仓库下载指定的分支. 编译后端 我下载的时候,grafana的最新release是7.3.7,其需要安装go 1.15版本 生成可执行文件 进入项目根 ...
- C# - 音乐小闹钟_BetaV2.0
时间:2017-11-21 作者:byzqy 介绍: 虽然上一版本基本实现了闹钟的功能,但是界面.功能.用户体验(简直谈不上体验^_^),以及众多的bug,所以升级,刻不容缓! 还是先看一下Beta ...