Bash 脚本 – 字符串操作

字符串操作是 bash 脚本。 在编程中,字符串是一种数据类型,它是有序的字符序列。 了解如何创建和操作字符串很重要 bash. 在本指南中,我们将通过简单的示例学习 Bash shell 脚本中的字符串操作。 你会很舒服地工作 bash 本文末尾的字符串。

变量赋值

可以将字符串分配给变量,然后在脚本中使用以进行进一步处理。 为了 example,我正在创建一个名为 "GREET_USER" 并将字符串打印到终端。

$ GREET_USER="Hello, Thanks for visiting OSTechnix"
$ echo "$GREET_USER"
将字符串分配给变量

Bash 没有强类型系统,因此如果您为变量赋值,它将被视为字符串类型。 您可以创建带有单引号、双引号或不带引号的字符串。

单引号和双引号是有区别的 bash. 单引号防止变量和命令扩展,而双引号支持它。 看看下面 example.

我创建了另一个名为 "SITE_NAME" 它用于 "GREET_USER" 多变的。 在双引号中,变量将被扩展,而在单引号中,变量将不会被扩展。

$ SITE_NAME="OSTechnix"
## DOUBLE QUOTES

$ GREET_USER="Hello, Thanks for visiting ${SITE_NAME}"
$ echo "$GREET_USER"
双引号的使用
# SINGLE QUOTES

$ GREET_USER='Hello, Thanks for visiting ${SITE_NAME}'
$ echo "$GREET_USER"
单引号的使用单引号的使用

字符串的长度

要查找字符串的长度,您可以使用 # 象征。 在某些情况下,您必须根据字符串的数量编写一些逻辑,查找字符串的长度会很有用。

$ echo "${#SITE_NAME}"
字符串的长度字符串的长度

将字符串转换为数组

有很多方法可以将字符串数据类型转换为数组类型。 最简单的方法是将字符串括在大括号内。

$ ARR_TYPE=($GREET_USER)
$ echo ${ARR_TYPE[@]}
$ for element in ${ARR_TYPE[@]}; do
  echo $element
done
字符串到数组字符串到数组

第二种方法是拆分字符串并将其存储为基于字符串中使用的分隔符的数组。 在上一个 example空格用作字段分隔符 (IFS),这是默认的 IFS bash. 为了 example,如果您有一个逗号分隔的字符串,您可以将 IFS 设置为逗号并创建一个数组。 有关 IFS 的更多详细信息,请参阅以下指南:

  • Bash 脚本 – While 和 until 循环用示例解释
$ STR_TO_ARR="column1,column2,column3"
$ IFS=","
$ ARR=(${STR_TO_ARR})
$ for element in ${ARR[@]}; do echo $element; done
$ echo "${ARR[@]}"
自定义 IFS - 数组转换自定义 IFS – 数组转换

案例转换

Bash 内置了对字符串大小写转换的支持。 您必须在字符串末尾使用一些特殊字符进行大小写转换,如下所示。

# SPECIAL CHARACTERS

,, ==> Converts an entire string to lowercase
^^ ==> Converts an entire string to Uppercase
~~ ==> Transpose Case
,  ==> Converts first letter alone to lowercase
^  ==> Converts first letter alone to uppercase
# ---- LOWER TO UPPER CASE ----
$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^}


# ---- UPPER TO LOWER CASE ----
$ U_TO_L="WELCOME TO OSTECHNIX"
$ echo ${L_TO_U,,}


# ---- TRANSPOSE CASE ----
$ TRS_CASE="Welcome To OsTechnix"
$ echo ${TRS_CASE~~}


# ---- FIRST LETTER TO LOWERCASE ----
$ F_TO_L="OSTECHNIX"
$ echo ${F_TO_L,}


# ---- FIRST LETTER TO UPPERCASE ----
$ F_TO_U="ostechnix"
$ echo ${F_TO_U^}
案例转换案例转换

您还可以使用正则表达式模式匹配并转换匹配的大小写。

$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^[toe]}
正则表达式模式匹配 - 大小写转换正则表达式模式匹配 – 大小写转换

字符串连接

您可以通过一个接一个地放置字符串来连接多个字符串。 根据字符串的连接方式,您也可以添加额外的字符。

$ SITE_NAME="OSTechnix"
$ MESSAGE="Welcome to"
$ echo "${MESSAGE} {SITE_NAME}"
字符串连接字符串连接

字符串切片

字符串切片是一种使用索引位置提取字符串的一部分的方法。 字符串中的每个字符都分配有一个整数值,可用于获取字符串的一部分。 索引值范围从 0 到 N。下面是切片的语法。

{STRING:START:LENGTH}

START => Starting Index Position
LENGTH => Length of the String from position START

如果 LENGTH 未指定则字符串将从索引位置打印到末尾 START.

$ SITE_NAME="OSTechnix"
$ echo ${SITE_NAME:2}
切片 - 从头到尾切片 – 从头到尾

给定 LENGTH 后,它将打印从 START 索引位置开始的子字符串以及要打印的字符数。

$ echo ${SITE_NAME:2:2}
切片 - 开始和长度切片 – 开始和长度

您还可以通过多种方式反转字符串。 最简单的方法是使用 rev 命令。 如果您希望在 bash 在不使用任何外部命令的情况下,您必须手动编写逻辑。

$ echo ${SITE_NAME} | rev
反转字符串反转字符串

搜索和替换

有一种本地方法可以搜索和替换字符串中的字符,而无需使用任何外部命令,例如 sed 或者 awk.

要替换第一次出现的子字符串,请使用以下语法。

{STRING/X/Y}
The first occurrence of X will be replaced by Y.

看看下面 example 单词第一次出现的地方 "linux" 被替换为 LINUX 大写。

$ MESSAGE="linux is awesome to work with.
Ubuntu is one of the powerful linux distribution"
$ echo $MESSAGE
$ echo ${MESSAGE/linux/LINUX}
替换第一次出现替换第一次出现

要替换所有出现的单词,请使用以下语法。

$ echo ${MESSAGE//linux/LINUX}
替换所有出现替换所有出现

删除子字符串

有多种方法可以从字符串中删除子字符串。 外部实用程序,例如 sed, awk, 或者 tr 可以使用或有办法做到这一点 bash 原生方式。

在里面 bash 本机方式,参数扩展用于删除子字符串。 您必须使用 % 符号后跟要删除的模式。 这将匹配最后找到的模式并将其删除。

为了 example,我希望删除句号之后的单词(.) 应使用以下语法。 在此期间之后的任何内容(.) 将被删除。 在这种情况下,最后匹配的模式 .com 已移除。

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%.*}
使用 % 符号删除子字符串使用 % 符号删除子字符串

要匹配模式的第一次出现,请使用 双倍百分比 象征

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%%.*}
使用 %% 符号删除子字符串使用 %% 符号删除子字符串

您还可以使用 # 或者 ## 将执行一种反向删除的符号。 用单 # 符号,则匹配第一个模式,并删除该模式之前的所有内容。

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME#*.}
使用 # 符号删除子字符串使用 # 符号删除子字符串

与双 ## 符号,则匹配最后一个模式,并删除该模式之前的所有内容。

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME##*.}
使用 ## 符号删除子字符串使用 ## 符号删除子字符串

结论

在本文中,我们已经了解了如何在 bash 以及操纵字符串的不同方法。 要熟悉 bash 字符串操作,启动终端并开始练习本指南中提供的示例。 如果您有任何反馈或问题,请使用下面的评论部分。

Bash 脚本指南:

  • Bash 脚本 – Printf 命令用示例解释
  • Bash 脚本——用示例解释索引数组
  • Bash 脚本——用示例解释的关联数组
  • Bash 脚本——用例子解释 For 循环
  • 用示例解释 Bash 重定向
  • Bash 脚本——用例子解释的变量
  • Bash 脚本——用例子解释的函数
  • 用 Linux 中的示例解释 Bash Echo 命令
  • Bash Heredoc 初学者教程