shell脚本学习(七)——字符串

字符串就是一系列字符的组合。字符串是Shell编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)

1 字符串的表达形式

字符串有三种形式:

(1)、 由单引号包围的字符串

任何字符都会原样输出,在其中使用变量是无效的, 字符串中不能出现单引号,即使对单引号进行转义也不行

(2) 由双引号包围的字符串

如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出,字符串中可以出现双引号,只要它被转义了就行

(3)不被引号包围的字符串

不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样,字符串中不能出现空格,否则空格后的字符串会作为其他变量或者命令来解析

#!/bin/bash
n=666
str1=www.baidu.com$n		 #不被引号包围的字符串,其中的变量会被解析
str2="shell \"stript\" $n"   #被双引号包围的字符串,进行转义后,变量也能被解析
str3='hello $n'				 #被单引号包围的字符串,其中的变量不会被解析,而是原样输出
echo $str1
echo $str2
echo $str3

在这里插入图片描述

2 获取字符串的长度

在shell中获取字符串长度的方法为:#str

#!/bin/bash
str="http://www.qq.com/shell"
echo ${#str}

在这里插入图片描述

3 字符串的拼接

在shell中字符串的拼接不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接。

#!/bin/bash
name="shell"
url="http://www.taobao.com"
str1=$name$url		 #中间不能有空格
str2="$name $url"	 #如果被双引号包围 那么中间可以有空格
str3=$name" : "$url  #中间可以出现别的字符
str4="$name : $url"
str5="${name}Script : ${url}index.html"
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5

在这里插入图片描述

4 字符串的截取

shell中截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取

(1)从指定位置开始截取

这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串。而且shell同时支持从字符串左边开始计数和从字符串右边开始计数的方式。

1)从字符串左边开始计数
格式

${string:start:length}
这里string是要截取的字符串
start是起始位置(从左边开始,从0开始计数)
length是要截取的长度(省略的话表示截到字符串的末尾)

在这里插入图片描述

2)从字符串右边开始计数
格式

${string:0-start:length}
与从字符串左边开始计数的格式基本相同,仅仅多了0-,这是固定写法,专门用来表示从字符串右边开始计数

在这里插入图片描述

注意:
(1) 从左边开始计数时,起始数字为0;从右边开始计数时,起始数字为1;
(2)不管从哪边开始计数,截取方向都是从左到右。

(2)从指定字符(子字符串)开始截取

注意:这种截取方式比较特殊,无法指定字符串的长度,只能从指定字符截取到字符串末尾。

1)使用#截取右边字符

使用#可以截取指定字符(或者子字符)右边的所有字符

格式

${string#*chars}
string表示要截取的字符串
chars是指定的字符(字符串)
*是通配符的一种,表示任意长度的字符串
chars*连接起来表示:忽略左边的左右字符,直到遇到chars(chars不会被截取)

在这里插入图片描述
上面所讲的是凡是匹配到第一个char就开始截取,但是有时候一个字符串中有好几个char,如果我们不想从第一个char截取而是想从最后一个char开始截取,那么就要使用## 格式如下:

${string##*chars}
它会一直匹配到最后一个字符,然后选最近的,按照刚才的方式进行截取

在这里插入图片描述

2)使用%截取左边字符

格式

${string%chars*}
这里一定要注意*的位置
截取方式:截取chars左边的字符,忽略chars右边的字符(所以*在chars右侧)
同样不会截取到指定字符chars

在这里插入图片描述
注意:这里的读取方式是从右往左匹配,直到遇到chars,截取它左边的字符

同样如果我们希望直到最后一个字符再匹配结束,那么需要使用%%,格式如下:

${string%%chars*}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值