shell编程基础(第10篇:字符串)

前言

    字符串,所有编程语言都有的概念,本质为一组字符组成的序列,在shell编程中更特别,因为字符串是shell中唯一的数据类型,哪怕你看到的是一个数字,它也是字符串,比如100

first=100

    100虽然是个数字,但它再shell中也是字符串,因为字符串是shell中唯一的数据类型(备注:理解为shell没有数据类型,只有字符串)

创建字符串的3种方式

1、无引号

first=hello

2、单引号

first='hello'

3、双引号

first="hello"

无引号:所有特殊字符保留作用

单引号:所有字符原样输出,所有特殊字符全部失去作用,且单词分隔功能失效,比如$、比如$()

双引号:支持变量替换、命令替换,其它所有字符会原样输出,且单词分隔功能失效

(备注:shell以IFS环境变量修饰的字符作为单词的分隔符,IFS的默认值是:空格字符、换行字符、制表符)

单词分隔

first=hello

 shell编程中,以IFS的默认值称为空白字符(换行、空格、制表,一共3个空白字符),空白字符作为单词分隔的字符,而单引号与双引号,均可让单词分割功能失效,当我们需要包括空格字符的时候,则必须使用单引号或者双引号将字符串括起来。

second="hello world"

此时由于双引号的存在,单词分隔功能失效,所以"hello world"成为一个整体,而不再是单独的2个单词

字符串长度的获取

str="wang"
echo ${#str}

请严格遵守标准的语法:${#变量名},因为#在shell编程中是个特殊变量名,表示命令行参数的个数

字符串拼接

其它语言使用+号拼接字符串,shell编程中,只要字符串挨着即为拼接,无需+号

a=wang
b=yuan
c=$a$b

解读代码:c=$a$b

1、先做变量值替换,所以$a会替换为wang、$b会被替换yuan

2、接着开始拼接为一个字符串wangyuan

3、结果再次赋值给变量c

紧紧的挨着字符串,即可完成字符串拼接,省去了其它语言常用的+号

理解字符串拼接

Java

String first = "hi";

String second = "man"

String result = first + second;

Java或者其他语言,总使用+号作为字符串拼接的连接符,而shell编程不需要任何字符作为连接符,字符串之间紧紧需要挨着即为拼接

Shell

first=hi

second=man

result=$first$second

一般情况下单词中间要有个空白字符,所以此时必须使用单引号或者双引号,使单词分隔功能失效,这样才能拼接为一个字符串,且包括空白字符,否则单词分隔功能一旦开始工作,会让bash认为第一个单词为命令,后面的单词为传递给命令的参数,从而引起错误(这个shell编程的标准,规定第一个单词是命令)

Shell

first=hi

second=man

result="$first $second"

大小写

# 转为大写
${varname^^}

# 转为小写
${varname,,}

英文字符,经常有转换大小写的概念,参照语法实现即可,注意:原始的变量值并不会改变,除非你再次赋值

子串操作

从一个字符串中,提取一部分字符串,称为子串操作

1、从头部开始截取子串

注意:
1、原始变量值不变
2、不是正则
3、匹配不成功,返回原始字符串
4、匹配成功,匹配部分被删除,返回剩下的字符串

${variable#pattern}
temp=helloworld

echo ${temp#hello}

输出:

world

2、从尾部截取子串

注意:
1、原始字符串值不变
2、不是正则
3、匹配不成功,返回原始字符串
4、匹配成功,匹配的部分会被删除,返回剩下的子串

结尾
1、如果 pattern 匹配变量的结尾,删除最短匹配的部分,返回剩余部分
${variable%pattern} (非贪婪匹配,使用一个%)

$ echo ${my_hello%ld}
hellowor

$ echo ${my_hello%w*}
hello

指定下标截取子串

序列的下标的从0开始,字符串作为序列,同时以0开始

1、基本语法

${varname:offset:length}

2、来个例子

#!/bin/bash

demo=helloworld

echo ${demo:1:4}

${demo:1:4}的解释

变量名为demo

起始下标为1

截取的字符串长度4

所以最后的输出:

ello

3、不会改变原始字符串,只是提取出来一段子串

${demo:1:4}

demo指向的字符串并没有任何改变

4、可以省略字符串长度,表示到字符串末尾

${demo:1}

输出:

elloworld

字符串替换

1、从字符串的头部开始替换(只替换匹配的第一个)

demo="helloworldworld"

echo ${demo/#world/love}

输出:

helloloveworld

2、从字符串的尾部开始替换(只替换匹配的第一个)

demo="helloworldworld"

echo ${demo/%world/love}

输出: 

helloworldlove

3、从字符串的中间开始替换(只替换一个)

demo="helloworldworld"

echo ${demo/world/love}

输出:

helloloveworld

4、从字符串的中间替换(替换所有)

demo="helloworldworld"

echo ${demo//world/love}

输出:

hellolovelove

总结

1、字符串拼接,不需要额外的+号,仅需挨着放在一起即为拼接,现在想想其他语言使用+号拼接是不是多此一举?

2、常常使用双引号修饰字符串,因为双引号中可以使用变量替换、命令替换、且又能完成带有空白空白字符的字符串拼接

3、shell编程中只有字符串一种数据类型,你看到每个都是字符串,包括看到的数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值