shell中的字符串

shell中的字符串

1.字符串的占位

字符串有三种形式:

  • 由单引号’ '包围的字符串
    任何字符都会原样输出,在其中使用变量是无效的
    字符串中不能出现单引号,即使对单引号进行转义也不行
  • 由双引号" "包围的字符串
    如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出
    字符串中可以出现双引号,只要它被转义了就行
  • 不被引号包围的字符串
    不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样
    字符串中不能出现空格,否则空格后面的字符串会作为其他变量或者的命名解析

具体区别演示:

#!/bin/bash
n=88
str1=www.baidu.com$n 		#不被引号包围,变量会被解析
str2="shell \"stript\" $n"	#被双引号包围,其中出现双引号时要被转义,变量会被解析
str3='你好 $n'				#被单引号包围,不会解析变量
echo $str1
echo $str2
echo $str3

在这里插入图片描述

2.获取字符串长度

#str 获取字符串长度

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

在这里插入图片描述

3.shell字符串拼接

在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字符串截取

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

- 从指定位置开始截取

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

在这里插入图片描述

  • 从字符串右边开始计数
    格式:
${string: 0-start :length}
同上面格式相比,这种格式仅仅多了0-,这是固定的写法,用来表示从字符串右边开始计数

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

在这里插入图片描述

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

这种截取方式无法指定字符串的长度,只能从指定字符截取到字符串末尾

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

在这里插入图片描述
注意:以上写法遇到第一个与指定字符匹配的字符就结束了
在这里插入图片描述
上图包含了好几个/,但是它遇到第一个/时就结束匹配了
如果希望直到最后一个指定字符再匹配结束,就可以使用##,具体格式:

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

在这里插入图片描述

  • 使用%截取左边字符
    格式:
${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、付费专栏及课程。

余额充值