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'>你好张三& ...
随机推荐
- Pikachu-RCE模块
一.概述 1.1 RCE漏洞 可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 1.2 远程系统命令执行一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令 ...
- NOIP 模拟 $21\; \rm Park$
题解 \(by\;zj\varphi\) 首先,分析一下这个答案:本质上是求在一条路径上,选择了一些点,这些点的贡献是它周围的点权和 - 它上一步的点权 对于一棵树,可以先确定一个根,然后每条路径就可 ...
- Git在IDEA中的日常使用
1.Git介绍Git对于做开发的小伙伴并不陌生,Git是现在比较流行的版本控制工具.Git的仓库分为本地仓库和远程仓库,当代码开发完成后,先提交(commit)到本地仓库,再推送(push)到远程仓库 ...
- 使用VSCode创建第一个VUE项目
vue init webpack vue_test回车,然后输入工程名称vue_test vue:Missing space before value for key 'components' 原因是 ...
- Python使用flask架构、跨域
from flask import Flask import json from flask_cors import CORS Server = Flask(__name__) cors = CORS ...
- 深入浅出Mybatis系列(八)---objectFactory、plugins、mappers
1.objectFactory是干什么的? 需要配置吗? MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成.默认的对象工厂需要做的仅仅是实例化 ...
- 关于windows下 python3安装 cython的说明
针对python3.6希望在windows环境下安装cython,但是网上任何关于mingw的尝试都没有生效.所以只能下载 vs, 1.去官网https://visualstudio.microsof ...
- 刷题-力扣-518. 零钱兑换 II
518. 零钱兑换 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change-2/ 著作权归领扣网络所有.商业转载 ...
- python内置函数:sorted中的参数key
x.sort和sorted函数中参数key的使用 介绍 python中,列表自带了排序函数sort >>> l = [1, 3, 2] >>> l.sort() & ...
- vue+vant实现购物车的全选和反选业务,带你研究购物车的那些细节!
前言 喜欢购物的小伙伴看过来,你们期待已久的购物车来啦!相信小伙伴逛淘宝时最擅长的就是加入购物车了,那购物车是如何实现商品全选反选的呢?今天就带你们研究购物车的源码,以vue+vant为例. 正文 首 ...