Redian新闻
>
Bash 基础知识系列 #6:处理字符串操作 | Linux 中国

Bash 基础知识系列 #6:处理字符串操作 | Linux 中国

科技
 
导读:在 Bash Shell 中可以查找子字符串、替换子字符串、连接字符串以及更多字符串操作。       
本文字数:1864,阅读时长大约:2分钟

在大多数编程语言中,你都会找到字符串数据类型。字符串基本上是一组字符。

但 Bash Shell 有所不同。字符串没有单独的数据类型。这里一切都是变量。

但这并不意味着你不能像在 C 和其他编程语言中那样处理字符串。

在 Bash Shell 中可以查找子字符串、替换子字符串、连接字符串以及更多字符串操作。

在 Bash 基础知识系列的这一部分中,你将学习基本的字符串操作。

在 Bash 中获取字符串长度

让我们从最简单的选项开始。也就是获取字符串的长度。这很简单:

  1. ${#string}

让我们在示例中使用它。

Example of getting string length in bash

正如你所看到的,第二个示例中有两个单词,但由于它用引号引起来,因此它被视为单个单词。连空格都算作一个字符。

在 Bash 中连接字符串

用技术术语来说是字符串 连接(concatenation),这是 Bash 中最简单的字符串操作之一。

你只需像这样一个接一个地使用字符串变量:

  1. str3=$str1$str2

还能比这更简单吗?我觉得不能。

让我们看一个例子。这是我的示例脚本,名为 join.sh

  1. #!/bin/bash
  2. read -p "Enter first string: " str1
  3. read -p "Enter second string: " str2
  4. joined=$str1$str2
  5. echo "The joined string is: $joined"

以下是该脚本的运行示例:

Join two strings in bash

在 Bash 中提取子字符串

假设你有一个包含多个字符的大字符串,并且你想要提取其中的一部分。

要提取子字符串,需要指定主字符串、子字符串的起始位置和子字符串的长度,如下所示:

  1. ${string:$pos:$len}

💡 和数组一样,字符串中的定位也是从 0 开始。

这是一个例子:

Extracting substring in bash

即使你指定的子字符串长度大于字符串长度,它也只会到达字符串末尾。

替换 Bash 中的子字符串

假设你有一个大字符串,并且你想用另一个字符串替换其中的一部分。

在这种情况下,你可以使用这种语法:

  1. ${string/substr1/substr2}

✋ 只有第一次出现的子字符串才会以这种方式替换。如果要替换所有出现的地方,请使用 ${string//substr1/substr2}

这是一个例子:

Replace substring in bash

正如你在上面看到的,“good” 一词被替换为 “best”。我将替换的字符串保存到同一字符串中以更改原始字符串。

💡 如果未找到子字符串,则不会替换任何内容。它不会导致错误。

在 Bash 中删除子字符串

我们来谈谈删除子字符串。假设你要删除字符串的一部分。在这种情况下,只需将子字符串提供给主字符串,如下所示:

  1. ${string/substring}

✋ 通过这种方式,仅删除第一次出现的子字符串。如果要删除所有出现的内容,请使用 ${string//substr}

如果找到子字符串,则将从字符串中删除它。

让我们通过一个例子来看看。

Delete substring in bash

不用说,如果没有找到子字符串,则不会删除它。它不会导致错误。

🏋️ 练习时间

现在是你通过简单练习来实践字符串操作的时候了。

练习 1:声明一个字符串 “I am all wet”。现在通过用 “set” 替换单词 “wet” 来更改此字符串。

练习 2:创建一个字符串,以 112-123-1234 格式保存电话号码。现在,你必须删除所有 -

这应该会给你一些在 Bash 中使用字符串的不错的练习。在下一章中,你将学习如何在 Bash 中使用 if-else 语句。敬请关注。

(题图:MJ/aa73b2c9-6d2f-42e2-972d-94fab56d30cc)


via: https://itsfoss.com/bash-strings/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :geekpi
💎💎💎💎
翻译: 1980.5 篇
|
贡献: 3563 天
2013-10-25
2023-07-28
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
一文详解信创基础知识你好,我是筚(bì)篥( lì)!Bash 基础知识系列 #1:创建并运行你的第一个 Bash Shell 脚本 | Linux 中国Bash 基础知识系列 #5:在 Bash 中使用数组 | Linux 中国算力网络基础知识(2023)这个国家已经准备先倒为敬了北大國學大師季羨林(1911年8月6日—2009年7月11日)一文详解云计算基础知识使用 Linux 让旧电脑焕发新颜 | Linux 中国Rust 基础系列 #8:编写里程碑 Rust 程序 | Linux 中国历史小说《黄裳元吉》第九十五章 寒意超越 Bash: 9 个不太知名的 Linux Shell 及其功能 | Linux 中国减脂是一个长期工程MOS管基础知识,快来收藏夹吃灰~Bash 基础知识系列 #9:Bash 中的函数 | Linux 中国存储系统基础知识全解(预告)雷达干扰的基础知识服务器基础知识大科普10 个在 Linux 终端中生成有趣的 ASCII 字符画的工具 | Linux 中国Bash 基础知识系列 #2:在 Bash 中使用变量 | 技术Bash 基础知识系列 #7:If Else 语句 | Linux 中国衙门存储系统基础知识全解(终极版)Bash 基础知识系列 #8:For、While 和 Until 循环 | Linux 中国Web 安全基础知识梳理(附PDF)5 个最漂亮的 Arch Linux 发行版 | Linux 中国如何在 Ubuntu 和其他 Linux 发行版中查看 AVIF 图像 | Linux 中国Rust 基础系列 #7: 在 Rust 中使用循环 | Linux 中国【初中物理】初二、三物理基础知识分类汇编终端基础:在 Linux 中复制文件和目录 | Linux 中国ICCV 2023 | 上交提出CCD:基于自监督字符到字符蒸馏的文本识别Rust 基础系列 #6: 条件语句 | Linux 中国Bash 基础知识系列 #3:传递参数和接受用户输入 | Linux 中国Java 迎来增强功能字符串模板,代码简化,安全性提升Linux Shell 介绍:Bash、Zsh 和 Fish | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。