Bash 初学者系列 6:bash 中的字符串操作

系统 Linux
今天我们就来介绍一下字符串操作函数,如何获取字符串长度、连接字符串、提取子字符串、替换子字符串等。

我们在前面的文章中介绍过 bash 中的变量​,了解到在 bash 中是没有比如字符串、整型等数据类型的,所有的都统称为变量。

但是,这并不意味着在 bash 中没有字符串操作函数。今天我们就来介绍一下字符串操作函数,如何获取字符串长度、连接字符串、提取子字符串、替换子字符串等。

获取字符串长度

字符串其实是字符的序列(数组),我们先创建一个名为 distro 的字符串,内容初始化为 Ubuntu。

distro="Ubuntu"

要获取字符串的长度,只需在变量名钱添加 # 即可,如下所示:​

$echo ${#distro}6

上述代码中,echo 命令用于打印值,{#string} 给出字符串的长度。

连接两个字符串

可以将一个字符串拼接到另一个字符串的末尾,为了演示,我们首先创建两个字符串str1和str2,如下所示:​

str1="hand"str2="book"

下面我们拼接这两个字符串,得到一个新字符串,赋值给变量 str3,如下所示:

str3=$str1$str2

图片

查找子字符串

可以查找某个字符或者字符串在另一个字符串中的位置(索引)。我们首先创建一个名为 str 的字符串,如下所示:

str="Bash is Cool"

我们可以使用 expr 命令来获取字符串 Cool 在 str 中的位置(索引):​

$"Cool"$"$str" "$word"9

上述例子中,结果 9 就是单词 "Cool" 在 str 中的索引位置。

提取子字符串

我们可以从一个字符串中提取子字符串,比如获取其中的一个字符、一个或几个单词。

我们首先创建一个名为 foss 的字符串变量:

foss="Fedora is a free operating system"

假设我们要提取 foss 中的第一个单词 "Fedora",那么需要提供单词在字符串中的起始位置(索引)以及要提取的字符数。所以,我们需要提供的参数为:0 作为起始位置,提取 6 个字符,如下代码所示:​

$echo ${foss:0:6}Fedora

注意,字符串中的第一个位置是零,就像bash中的数组​一样。也可以只指定子字符串的起始位置,而忽略字符数。在这种情况下,将提取从字符串的起始位置到结尾的所有内容。

例如,从foss字符串中提取子字符串“free operating system”, 我们只需要指定起始位置12:​

$echo ${foss:12}free operating system

字符串替换

可以将某一字符串中的子字符串,替换为另一个字符串。比如,我们可以将上面例子中 foss 字符串中的 “Fedoras”替换为“Ubuntu”,如下所示:​

$echo ${foss/Fedora/Ubuntu}Ubuntu is a free operating system

再比如,将子字符串“free”替换为“popular”:

$echo ${foss/free/popular}Fedora is a popular operating system

上面例子中,我们使用 echo 命令打印结果,原始字符串是不会被改变的。

删除子字符串

也可以删除子字符串。为了演示,我们首先创建一个名为 fact 的字符串,如下所示:

fact="Sun is a big star"

我们从 fact 字符串中删除字符串“big”:​

$echo ${fact/big}Sun is a star

另外一个例子,我们创建一个新字符串 cell:

cell="112-358-1321"

假设我们这次的目的是要删除 cell 中所有的破折号;那下面的语句只会删除 cell 中的第一个破折号:

$echo ${cell/-}112358-1321

要删除 cell 中所有的破折号,需要使用双斜杠,如下所示:

$echo ${cell//-}1123581321

这里需要注意,跟上面的例子一样,我们是使用 echo 命令打印的结果(结果也可以赋值给另外一个变量),因此原字符串(变量)cell 是没有被改变的。

如果要修改原字符串,只需要将结果在分配回字符串即可:​

$echo $cell112-358-1321$${cell//-}$echo $cell1123581321

大小写转换

可以对字符串中的字母进行大小写转换。我们先创建两个字符串,分别命名为 legend 和 actor:​

legend="john nash"actor="JULIA ROBERTS"

首先演示将 legend 中的字母全部转为大写:

$echo ${legend^^}JOHN NASH

然后我们将 actor 中的字母转为小写:​

$echo ${actor,,}julia roberts

或者将 legend 中的第一个字母转为大写:

$echo ${legend^}John nash

或者,将 actor 中的第一个字母转为小写:

$echo ${actor,}jULIA ROBERTS

此外,还可以将字符串中的某些字符改为大写或小写。比如,我们可以将 legend 中的字母 j 和 n 转为大写:​

$echo ${legend^^[jn]}JohN Nash
责任编辑:庞桂玉 来源: TIAP
相关推荐

2022-12-13 12:55:15

Bash循环

2022-12-09 07:58:52

Bash条件语句

2022-11-30 07:47:00

Bash脚本

2022-12-14 10:08:00

BashLinux

2022-12-02 14:30:24

Bash脚本数组

2022-12-01 08:10:49

Bash脚本参数

2022-12-16 09:01:24

2022-12-07 07:43:21

2023-07-30 09:50:51

Bash字符串

2022-11-28 08:01:47

BashLinuxshell 脚本

2022-11-25 07:53:26

bash脚本字符串

2015-03-23 17:18:18

Java字符串问题

2017-12-11 13:50:17

LinuxBash子字符串

2023-01-09 09:52:06

Bash字符串

2022-05-10 09:47:10

Bash字符串Linux

2019-06-11 09:52:18

IPv6IPv4程序

2011-06-17 15:19:28

Qt

2023-08-22 21:42:03

Bash函数

2020-06-04 08:10:30

Python字符串开发

2009-11-13 15:46:25

Java多线程
点赞
收藏

51CTO技术栈公众号