linuxshell编程之数组和字符串处理工具
数组:存放多个元素的连续内存空间。
声明数组:bash-4以后支持除默认的0,1,2……还可以自定义索引格式,此类数组称之为“关联数组”
声明索引数组:declare -a NAME
声明关联数组:declare -A NAME
索引数组赋值:
索引方式赋值:ARRAY_NAME[INDEX]=value
ARRAY_NAME=("value1" "value2" ……)
ARRAY_NAME=value([0]="value1" [3]="value2")
交互式赋值:read -a ARRAY_NAME
关联数组赋值
ARRAY_NAME=([INDEX_NAME1]="VALUE1") [INDEX_NAME2]="VALUE2").....)
数组索引:代表元素所在数组的位置属性,从0开始。
格式:数组名[索引]
引用数组中某个元素:${ARRAY_NAME[INDEX]}
当不给出INDEX时默认值为0,引用数组中个某一元素值时一定要使用${}。

数组切片:
${ARRAY_NAME[@]:offset:number}
offset:偏移量,要跳过的元素个数
number:要取出的元素个数;省略number,表示取偏移量之后的所有元素
增加元素:
ARRAY_NAME[${#ARRAY_NAME[*]}]=
${ARRAY_NAME[*]}:数组中元素个数
删除元素:
unset ARRAY[INDEX]
字符串处理:
字符串切片:
${var:offset:number},取字符串的子串。
${var: -length}:从右侧取length个字符。
注意:冒8号后一定要有一个空格。
基于分隔符取子串
${var#*word}:
word:指定的分隔符。
功能:自左而右,查找var变量中所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。
${var##*word}:
word:指定的分隔符。
功能:自左而右,查找var变量中所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。

${var%word*}:
word:指定的分隔符。
功能:自右而左,查找var变量中所存储的字符串中,第一次出现的word分隔符,删除字符串尾部至此分隔符之间的所有字符。
${var%%word*}:
word:指定的分隔符。
功能:自右而左,查找var变量中所存储的字符串中,最后一次出现的word分隔符,删除字符串尾部至此分隔符之间的所有字符。

查找替换:
${var/PATTERN/SUBSTITUTE}:查找var所表示的字符串中,将第一次被PATTERN所匹配的字符串,替换为SUBSTITUTE所表示的字符串。
${var//PATTERN/SUBSTITUTE}:查找var所表示的字符串中,将所有被PATTERN所匹配的字符串,替换为SUBSTITUTE所表示的字符串。
${var/#PATTERN/SUBSTITUTE}:查找var所表示的字符串中,行首被PATTERN所匹配的字符串,将其替换为SUBSTITUTE所表示的字符串。
${var/%PATTERN/SUBSTITUTE}:查找var所表示的字符串中,行尾被PATTERN所匹配的字符串,将其替换为SUBSTITUTE所表示的字符串。
查找删除:
${var/PATTER}:将var中第一次被PATTERN匹配的字符串删除。
${var//PATTER}:将var中所有被PATTERN匹配的字符串删除。
${var/#PATTER}:将var中行首被PATTERN匹配的字符串删除。
${var/%PATTER}:将var中行尾被PATTERN匹配的字符串删除。
大小写转换:
${var^^}:把var中所有小写字符转换成大写。
${var,,}:把var中所有大写字符转换成小写。
变量赋值:
${var:-VALUE}:如果var变量为空或未设置,那么返回value;否则返回var变量的值
${var:=value}:如果var变量为空或未设置,那么返回value,并将VALUE赋值给变量var;否则返回var变量的值
${var:?ERROR_INFO}:如果var变量为空或未设置,那么返回ERROR_INFO;否则返回var变量的值
${var:+VALUE}:如果var变量不为空,那么返回value;

linuxshell编程之数组和字符串处理工具的更多相关文章
- Linux-Shell编程之数组操作
源码 #!/bin/bash str="Array - Demo Shell"; echo ${#str} #求字符串長度 #定義 arr=('a' 'b' 'c' 'd' 'e' ...
- Linux Shell脚本编程-数组和字符串处理
数组 1.数组的定义及声明 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名:整个数组只有一个名字 索引:编号从0开始,属于数值索引:bash的数组支持 ...
- shell编程系列4--有类型变量:字符串、只读类型、整数、数组
shell编程系列4--有类型变量:字符串.只读类型.整数.数组 有类型变量总结: declare命令和typeset命令两者等价 declare.typeset命令都是用来定义变量类型的 decla ...
- Arrays -数组工具类,数组转化字符串,数组排序等
package cn.learn.basic; import java.util.Arrays; /* java.util.Arrays是一个与数组相关的工具类,含有大量静态方法,用来实现数组常见的操 ...
- C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
最近用base64编码传图片遇到了点问题,总结下. 首先总结下base64编码的逻辑,来自网络:https://www.cnblogs.com/zhangchengye/p/5432276.html ...
- Java编程基础——数组和二维数组
Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...
- Java操作字符串的工具类
操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...
- OJ——华为编程题目:输入字符串括号是否匹配
package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例 ...
- js数组的操作及数组与字符串的相互转化
数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...
随机推荐
- 简要概括java技术体系
以前一直在学java程序设计语言,学完了就以为自己已经把java学得差不多了,直到最近在看一本书<深入理解java虚拟机>,才发现自己以前学的只不过是冰山一角.相信很多小伙伴跟我一样,在没 ...
- Mysql 性能优化及问题
MySQL max_allowed_packet设置及问题 查看 max_allowed_packet show VARIABLES like '%max_allowed_packet%'; 以下内容 ...
- net core WebApi——公用库April.Util公开及发布
前言 在之前鼓捣过一次基础工程April.WebApi后,就考虑把常用的类库打包做成一个公共类库,这样既方便维护也方便后续做快速开发使用,仓库地址:April.Util_github,April.Ut ...
- html2canvas 生成电子合同书
首先给合同书父级加个ref 然后用html2canvas 插件 然后html2canvas 坑区来了,生成页面的时候,合同书是很长的.他有一部分是黑色的, 最开始从前辈们了解到是滚至顶部解决偏移.然后 ...
- 【原创】基于.NET的轻量级高性能 ORM - TZM.XFramework 之让代码更优雅
[前言] 大家好,我是TANZAME.出乎意料的,我们在立冬的前一天又见面了,天气慢慢转凉,朋友们注意添衣保暖,愉快撸码.距离 TZM.XFramework 的首秀已数月有余,期间收到不少朋友的鼓励. ...
- EffectiveJava-2
一.使用类库 使用类库的好处: 无须关心方法是如何实现的,由算法专家花了大量时间设计.实现和测试这个方法,不仅保证了正确性,而且一旦有缺陷,下一个版本就会修复. 不必浪费时间为哪些与工作不太相关的问题 ...
- 接口自动化、移动端、web端自动化如何做?
1.<Python+Appium移动端自动化项目实战>-带您进入APP自动化测试的世界https://yuedu.baidu.com/ebook/765b38a5690203d8ce2f0 ...
- Vim 便捷 | 自己的Vim
在.vimrc中安排自己的Vim set softtabstop=4 "将连续数量的空格视为一个制表符 set shiftwidth=4 "自动缩进所使用的空白数 set auto ...
- 关闭redis持久化功能
关闭redis持久化功能持久化会报如下信息 会影响硬盘写入性能 所以没什么用 就关掉吧 修改redis配置文件,redis.conf 第115行左右. 1.注释掉原来的持久化规则 <pre> ...
- elastalter邮件告警
一:简介 ElastAlert是一个简单的框架,用于通过Elasticsearch中的数据异常警告,峰值或其他感兴趣的模式. 监控类型 "匹配Y时间内有X个事件的地方"(frequ ...