当前位置: 首页 > 科技观察

Bash入门系列之六:bash中的字符串操作

时间:2023-03-18 12:50:20 科技观察

上一篇我们介绍了bash中的变量,了解到bash中没有字符串、整数等数据类型,统称为变量。然而,这并不意味着bash中没有字符串操作函数。今天我们将介绍字符串操作函数,如何获取字符串长度、拼接字符串、提取子字符串、替换子字符串等。获取字符串长度String实际上是一个字符序列(数组),我们首先创建一个名为发行版,内容被初始化为Ubuntu。distro="Ubuntu"要获取字符串的长度,只要在变量名后面加上#即可,如下所示:$echo${#distro}6上面代码中,echo命令用于打印值,{#string}给出字符串的长度。连接两个字符串可以将一个字符串拼接到另一个字符串的末尾。为了演示,我们先创建两个字符串str1和str2,如下所示:=$str1$str2Findasubstring查找一个字符或一个字符串在另一个字符串中的位置(索引)。我们首先创建一个名为str的字符串,如下所示:str="BashisCool"我们可以使用expr命令获取字符串Cool在str中的位置(索引):$"Cool"$"$str""$word"9在上面的例子中,结果9就是单词“Cool”在str中的索引位置。提取子串我们可以从一个字符串中提取子串,比如获取一个字符,一个或几个单词。我们首先创建一个名为foss的字符串变量:foss="Fedoraisafreeoperatingsystem"假设我们要提取foss中的第一个单词“Fedora”,那么我们需要提供该单词在字符串中的起始位置(index)以及要提取的字符数。因此,我们需要提供的参数是:0作为起始位置,提取6个字符,如下代码所示:$echo${foss:0:6}Fedora注意字符串中第一个位置为0,就像bash中的数组一样。也可以仅指定子字符串的起始位置,而忽略字符数。在这种情况下,将提取字符串从开头到结尾的所有内容。例如,从foss字符串中提取子串“freeoperatingsystem”,我们只需要指定起始位置12即可:$echo${foss:12}freeoperatingsystemstringreplacement可以替换一个字符串String中的子串来替换用另一个字符串。例如,我们可以将上例中的foss字符串中的“Fedoras”替换为“Ubuntu”,如下:free"和"popular":$echo${foss/free/popular}Fedora是一个流行的操作系统在上面的例子中,我们使用echo命令打印结果,不会改变原来的字符串。删除子字符串也会删除子字符串。为了演示,我们首先创建一个名为fact的字符串,如下所示:fact="Sunisabigstar"我们从事实字符串中删除字符串"big":$echo${fact/big}Sunisastar另一个例子,我们创建一个新的字符串单元格:cell="112-358-1321"假设我们这次的目的是删除单元格中的所有破折号;那么下面的语句只会删除单元格中的第一个破折号A破折号:$echo${cell/-}112358-1321要删除单元格中的所有破折号,需要使用双斜杠,如下所示:$echo${cell//-}1123581321这里要注意,如上例,我们使用echo命令打印结果(结果也可以赋值给另一个变量),所以原来的字符串(变量)cell并没有改变.如果想修改原来的字符串,只需要将结果赋值回字符串即可:$echo$cell112-358-1321$${cell//-}$echo$cell1123581321大小写转换可以改变字符串中的字母进行大小写转换。我们创建两个字符串,分别命名为legend和actor:演员转小写:$echo${actor,,}juliaroberts或者将图例中的首字母转为大写:$echo${legend^}Johnnash或者,将演员中的首字母转为小写:$echo${actor,}jULIAROBERTS此外,您可以将字符串中的某些字符转换为大写或小写。例如,我们可以将图例中的字母j和n大写:$echo${legend^^[jn]}JohNNash