前言
对字符串的操作在众多的编程语言中可以说是最基础的了,字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)。
一、shell 中字符串的几种格式
在shell中,字符串主要有下面几类写法:
-
单引号方式
-
双引号方式, 推荐
-
不用引号方式
三种写法的区别
1、使用单引号 ''
的字符串:
任何字符都会原样输出,在其中使用变量是无效的。
2、由双引号" "
包围的字符串:
1)其中包含了变量,那么该变量会被解析得到值,而不是原样输出;
2)字符串中还可以出现双引号的子字符串,但是需要转义;
3、不被引号包围的字符串
1)不被引号包围的字符串中出现变量时也会被解析,这一点和双引号
" "
包围的字符串一样;2)字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析;
二、字符串常用操作
1、获取字符串长度
${#字符串变量名}
2、字符串拼接
几种常用的拼接方式:
-
无符号拼接
-
双引号拼接
-
混合拼接
无符号拼接
双引号拼接
混合拼接
3、字符串截取
字符串截取操作在众多的编程语言中可以说是非常常见的一种操作了,尤其是在python语言中,使用非常高频,而在shell中,也提供了毕竟丰富的字符串截取的操作;
格式 | 说明 |
---|---|
${变量名:start:length} | 从 string 字符串的左边第 start 个字符开始, 向右截取 length 个字符。 |
${变量名:start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${变量名:0-start:length} | 从 string 字符串的右边第 start 个字符开始, 向右截取 length 个字符。 |
${变量名:0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
${变量名#*chars} | 从 string 字符串第一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。 |
${变量名##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。 |
${变量名%chars*} | 从 string 字符串最后第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符。 |
${变量名%%chars*} | 从 string 字符串第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符 |
下面随机演示几个截取的操作命令
三、数组
Shell 支持数组(Array), 数组是若干数据的集合,其中的每一份数据都称为数组的元素。
注意Bash Shell 只支持一维数组,不支持多维数组
1、数组语法
在 Shell 中,用括号( )
来表示数组,数组元素之间用空格来分隔. 语法为
array_name=(item1 item2 ...) # 方式1
array_name=([索引下标1]=item1 [索引下标2]=item2 ...) # 方式2
注意,赋值号 =
两边不能有空格
2、数组定义
使用小括号定义一组数字
num1=(1 2 3 4 5)
数组中可以存在不同类型的元素
num1=(1 2 3 4 “hello”)
Shell数组元素定义后不是固定的, 定义后还可以赋值
arr[6]=100
也可以给指定元素赋值初始化
arr2=([0]=1 [2]=100 [4]=aa)
3、数组中值的获取
1.通过下标获取元素值,index从0开始
${arr[index]}
2、获取值同时复制给其他变量
item=${arr[index]}
3、使用 @
或 *
可获取数组中的所有元素
${arr[@]}
${arr[*]}
4.获取数组的长度或个数
${#arr[@]}
${#arr[*]}
5.获取数组指定元素的字符长度
${#arr[索引]}
4、数组的拼接
所谓 Shell 的数组拼接(数组合并),就是将两个数组连接成一个数组
语法
使用
@
和*
获取数组所有元素之后进行拼接:array_new=(${array1[@]} ${array2[@]} ...)
array_new=(${array1[*]} ${array2[*]} ...)
案例展示
5、数组的删除
删除数组指定元素数据
unset array_name[index]
删除整个数组
unset array_name
案例展示:删除num1 中的第一个元素
案例展示:删除num1这个数组