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

让我们操作一些字符串!

如果你熟悉变量 bash,您已经知道字符串、int 等没有单独的数据类型。一切都是变量。

但这并不意味着您没有字符串操作函数。

在上一章中,您学习了 Bash 中的算术运算符。 在本章中,您将学习如何使用各种字符串操作来操作字符串。 您将学习如何获取字符串的长度、连接字符串、提取子字符串、替换子字符串等等!

获取字符串长度

让我们从获取字符串的长度开始 bash.

字符串只不过是一个字符序列(数组)。 让我们创建一个名为的字符串 发行版 并将其值初始化为“Ubuntu”。

distro="Ubuntu"

现在要获取发行版字符串的长度,您只需添加 # 在变量名之前。 您可以使用以下 echo 语句:

[email protected]:~/scripts$ echo ${#distro}
6

请注意, echo 命令用于打印该值。 {#string} 是什么给出了字符串的长度。

连接两个字符串

您可以将一个字符串附加到另一个字符串的末尾; 这个过程称为字符串连接。

为了演示,我们先创建两个字符串 str1 str2 如下

str1="hand"
str2="book"

现在您可以连接两个字符串并将结果分配给一个名为的新字符串 str3 如下:

str3=$str1$str2

它不能比这更简单,不是吗?

查找子字符串

您可以在字符串中找到特定字母或单词的位置(索引)。 为了演示,让我们首先创建一个名为 字符串 如下:

str="Bash is Cool"

现在你可以得到子字符串cool的具体位置(索引)。 为此,请使用 expr 命令:

[email protected]:~/scripts$ word="Cool"
[email protected]:~/scripts$ expr index "$str" "$word"
9

结果 9 是单词“Cool”在 字符串 细绳。

我故意避免使用条件语句,例如 if,else 因为在这个 bash 初学者系列,条件语句将在后面介绍。

提取子串

您还可以从字符串中提取子字符串; 也就是说,你可以从一个字符串中提取一个字母、一个词或几个词。

为了演示,让我们首先创建一个名为 福斯 如下:

foss="Fedora is a free operating system"

现在假设您要提取第一个单词“Fedora“ 在里面 福斯 细绳。 您需要指定所需子字符串的起始位置(索引)以及需要提取的字符数。

因此,要提取子串“Fedora”,您将使用 0 作为起始位置,您将从起始位置提取 6 个字符:

[email protected]:~/scripts$ echo ${foss:0:6}
Fedora

请注意,字符串中的第一个位置为零,就像数组中的情况一样 bash. 您也可以只指定子字符串的起始位置并省略字符数。 在这种情况下,将从开始位置到字符串结尾的所有内容都将被提取。

为了 example从 福斯 细绳; 我们只需要指定起始位置 12:

[email protected]:~/scripts$ echo ${foss:12}
free operating system

替换子串

您也可以用另一个子字符串替换一个子字符串; 为了 example你可以替换“Fedora”中带有“Ubuntu” 福斯 字符串如下:

[email protected]:~/scripts$ echo ${foss/Fedora/Ubuntu}
Ubuntu is a free operating system

让我们再做一个 example,让我们将子字符串“free”替换为“popular”:

[email protected]:~/scripts$ echo ${foss/free/popular}
Fedora is a popular operating system

由于您只是使用 echo 命令打印值,因此不会更改原始字符串。

删除子字符串

您还可以删除子字符串。 为了演示,让我们首先创建一个名为 事实 如下:

fact="Sun is a big star"

您现在可以从字符串 fact 中删除子字符串“big”:

[email protected]:~/scripts$ echo ${fact/big}
Sun is a star

让我们创建另一个名为 cell 的字符串:

cell="112-358-1321"

现在假设您要从 细胞 细绳; 以下语句将仅删除第一个破折号出现在 细胞 细绳:

[email protected]:~/scripts$ echo ${cell/-}
112358-1321

细胞 字符串,您必须使用双正斜杠,如下所示:

[email protected]:~/scripts$ echo ${cell//-}
1123581321

请注意,您正在使用 echo 语句,因此单元格字符串是完整的并且没有被修改; 您只是在显示所需的结果!

要修改字符串,您需要将结果分配回字符串,如下所示:

[email protected]:~/scripts$ echo $cell
112-358-1321
[email protected]:~/scripts$ cell=${cell//-}
[email protected]:~/scripts$ echo $cell
1123581321

转换字符串中的大小写字母

您还可以将字符串转换为小写字母或大写字母。 让我们首先创建两个名为 传奇 演员:

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

您可以转换所有的字母 传奇 字符串转大写:

[email protected]:~/scripts$ echo ${legend^^}
JOHN NASH

您还可以将演员字符串中的所有字母转换为小写:

[email protected]:~/scripts$ echo ${actor,,}
julia roberts

您也可以只转换 传奇 字符串转大写如下:

[email protected]:~/scripts$ echo ${legend^}
John nash

同样,您只能转换 演员 字符串转小写如下:

[email protected]:~/scripts$ echo ${actor,}
jULIA ROBERTS

您还可以将字符串中的某些字符更改为大写或小写; 为了 example你可以改变字母 jn 为大写 传奇 字符串如下:

[email protected]:~/scripts$ echo ${legend^^[jn]}
JohN Nash

惊人的! 这将我们带到本教程的结尾 bash 初学者系列。 下载以下 PDF 并练习您刚刚学到的内容。

Bash 第 6 章练习题问题及其解决方案,用于练习您在本章中刚刚学到的内容 Bash-Chapter-6-Practice-Questions-Linux-Handbook.pdf 28 KB

下载圈

我希望你喜欢在 bash 并查看下一章,因为您将学习如何将决策技能添加到您的 bash 脚本!