当前位置: 首页 > news >正文

Linux shell编程学习笔记8:使用字符串

一、前言


字符串是大多数编程语言中最常用最有用的数据类型,这在Linux shell编程中也不例外。

本文讨论了Linux Shell编程中的字符串的三种定义方式的差别,以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,,以及反引号在echo 和 expr命令联合使用时的作用。

二、定义字符串

Linux Shell编程中的字符串可以用单引号,也可以用双引号,如果不包含空格,也可以不用引号。

(一)无引号字符串

实例:

user@host: ~ # var1=abc123

user@host: ~ # echo $var1

abc123

user@host: ~ #

变量var1的值abc123中不包括变格,因此在赋值可以不用引号。

(二)单引号字符串
 

单引号里的任何字符都会原样输出,变量在单引号字符串中无效,即使在变量名前加上$字符,变量仍不会被识别。


单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

实例1:单引号字符串中变量无效

user@host: ~ # alpha='abcd"

user@host: ~ # echo $alpha

abcd

user@host: ~ # echo '$alpha123'

$alpha123

user@host: ~ # echo 'alpha123'

alpha123

user@host: ~ # 

实例2:单引号字符串拼接

user@host : ~ # alpha='abcd'
user@host : ~ # echo $alpha 
abcd
user@host : ~ # echo '< '$alpha'>'
<abcd>
user@host : ~ # echo '<'${alpha}'>'
<abcd>
user@host : ~ # echo '<${alpha}> '
<${alpha}>
user@host : ~ # echo '<$alpha>'
<$alpha>
user@host : ~ # echo '<''>'
<>
user@host : ~ # 

(三)双引号字符串

在被双引号括起来的字符中,"$"、"\"和反引号是拥有特殊含义的,"$"代表引用变量的值,而反引号代表引用命令。

所以,双引号里可以有变量,可以出现转义字符。

实例1:双引号中的变量会被识别

user@host : ~ # alpha=“abcd”
user@host : ~ # echo $alpha 
abcd
user@host : ~ # echo "\$alpha=$alpha"
$alpha = abcd
user@host : ~ # echo "\$alpha = \"${alpha}\""
$alpha = "abcd"
user@host : ~ # 

在上面的实例中,输出$、双引号等需要使用转义字符,即在符号前加上\。

 

实例2:双引号拼接字符串

user@host : ~ # alpha='abcd'
user@host : ~ # echo $alpha 
abcd
user@host : ~ # echo "<""$alpha "">"
<abcd>
user@host : ~ # echo "<""${alpha} "">"
<abcd>

user@host : ~ #

三、取字符串长度

  (一)格式

 格式:${#string}

(二)实例:

user@host : ~ # alpha='abcd'
user@host : ~ # echo ${#alpha} 
4

user@host : ~ # echo ${#alpha[0]} 

-sh: syntax error: bad substitution

user@host : ~ #

网上有资料称:变量为字符串时,${#string} 等价于 ${#string[0]}。但在sh中测试无效。

四、提取子字符串

(一)格式

格式:${#string:n:m}

说明:n-起始字符索引值,字符串首字符索引值为0

           m-子串长度

(二)实例

user@host : ~ # alpha='abcd'
user@host : ~ # echo ${#alpha:0:2} 
ab

user@host : ~ # echo ${#alpha:0:8} 

abcd

user@host : ~ #

其中命令 echo ${#alpha:0:2}   是从首字符开始提取2个字符,结果是:ab

其中命令  echo ${#alpha:0:8}  是从首字符开始提取8个字符,结果是:abcd

从上例可知,如指定的子串长度超过母串长度,则截取至母串末。

五、查找子字符串

(一)格式

格式:expr index string substring

说明:

expr       :是UNIX/LINUX下的一个手工命令行计数器,用于计算表达式变量的值,一般用于整数值,也可用于字符串。

index      :表示要进行索引操作

string      :待查找的字符串

substring:要查找的子字符串

(二)实例

user@host : ~ # alpha='abcd'
user@host : ~ # expr index $alpha bc

2

user@host : ~ # echo 'expr index ${alpha} bc'

expr index ${alpha} bc

user@host : ~ # echo `expr index ${alpha} bc`

2

user@host : ~ #

d

在上例中,我们可以在命令行中使用命令 expr index $alpha bc 查找子字符串 ab 在字符串变量alpha值中的位置

如果要与echo命令配合使用的话,不能使用单引号,而需要使用反引号。

在命令 echo 'expr index ${alpha} bc' 中,  使用的是单引号,expr index ${alpha} bc 被当成字符串直接输出,所以命令执行结果是:expr index ${alpha} bc

在命令 echo `expr index ${alpha} bc` 中,使用的是反引号,expr index ${alpha} bc作为命令执行,所以命令执行结果是:2

相关文章:

Linux shell编程学习笔记8:使用字符串

一、前言 字符串是大多数编程语言中最常用最有用的数据类型&#xff0c;这在Linux shell编程中也不例外。 本文讨论了Linux Shell编程中的字符串的三种定义方式的差别&#xff0c;以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,&#xff0c;以及反…...

【Spring笔记03】Spring依赖注入各种数据类型

这篇文章&#xff0c;详细介绍一下Spring框架中如何注入各种数据类型&#xff0c;包含&#xff1a;注入基本数据类型、数组、集合、Map映射、Property属性、注入空字符串、注入null值、注入特殊字符等内容&#xff0c;以及如何使用命名空间进行依赖注入。 目录 一、注入各种数据…...

2023计算机保研——双非上岸酒吧舞

我大概是从22年10月份开始写博客的&#xff0c;当时因为本校专业的培养方案的原因&#xff0c;课程很多&#xff0c;有些知识纸质记录很不方便&#xff0c;于是选择了打破了自己的成见使用博客来记录学习生活。对于我个人而言&#xff0c;保研生活在前一大半过程中都比较艰难&a…...

《计算机视觉中的多视图几何》笔记(13)

13 Scene planes and homographies 本章主要讲述两个摄像机和一个世界平面之间的射影几何关系。 我们假设空间有一平面 π \pi π&#xff0c;平面上的一点为 x π x_{\pi} xπ​。 x π x_{\pi} xπ​分别在两幅图像 P , P ′ P, P P,P′上形成了 x , x ′ x, x x,x′。 那…...

H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口

一款比较简单的 H5 移动端购物商城系统源码&#xff0c;比较适合单品商城、小型商城使用。带有易支付接口。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88391704 源码下载2&#xff1a;评论留言或私信留言...

全志ARM926 Melis2.0系统的开发指引⑤

全志ARM926 Melis2.0系统的开发指引⑤ 编写目的8. 固件修改工具(ImageModify)使用8.1.界面说明8.2.操作步骤8.2.1. 配置平台8.2.2. 选择固件8.2.3. 选择要替换的文件8.2.4. 替换文件8.2.5. 保存固件 8.3.注意事项8.4.增加固件修改权限设置8.4.1. 概述8.4.2. 操作说明8.4.2.1.打…...

【AI视野·今日Robot 机器人论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 4 Oct 2023 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;基于神经网络的多模态触觉感知, classification, position, posture, and force of the grasped object多模态形象的解耦(f…...

GPX可视化工具 GPX航迹预览工具

背景 当我们收到别人分享的航迹文档&#xff0c;即gpx文档时&#xff0c;如何快速的进行浏览呢&#xff1f;我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹&#xff0c;例如常用的GIS软件有googleEarth&#xff0c; Basecamp&#xff0c; GPXsee&#xff0c; GPX E…...

学信息系统项目管理师第4版系列18_采购管理

1. 协议 1.1. 合同 1.1.1. 国际合作的项目经理应牢记&#xff0c;无论合同规定如何详尽&#xff0c;文化和当地法律对合同及其可执行性均有影响 1.2. 服务水平协议&#xff08;SLA&#xff09; 1.3. 谅解备忘录 1.4. 协议备忘录&#xff08;MOA&#xff09; 1.5. 订购单 …...

标准化数据模型

标准化数据模型 标准化被定义为减少或消除数据集中冗余的过程。 它已成为关系数据库中数据建模的事实上的方法&#xff0c;很大程度上是由于这些系统最初设计时所围绕的底层资源限制&#xff1a;缓慢的磁盘和昂贵的 RAM。更少的数据冗余/重复意味着更有效地从磁盘读取数据并占…...

linux平台源码编译ffmpeg

目录 编译平台 编译步骤 编译平台 中标麒麟 编译步骤 1 从Download FFmpeg 下载源码&#xff0c;我选中了4.2.9版 2 解压 3 在解压后的目录下输入 ./configure --enable-shared --prefix/usr/local/ffmpeg 4 make 5 sudo make install 6 ffmpeg的头文件、可执行程…...

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中&#xff0c;实现拖拽和排序功能是非常常见的需求&#xff0c;特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架&#xff0c;提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…...

新款UI动态壁纸头像潮图小程序源码

新款UI动态壁纸头像潮图小程序源码&#xff0c;不需要域名服务器&#xff0c;直接添加合法域名&#xff0c;上传发布就能使用。 可以对接开通流量主&#xff0c;个人也能运营&#xff0c;不需要服务器源码完整。整合头像&#xff0c;动态壁纸&#xff0c;文案功能齐全。 源码…...

Python逐日填补Excel中的日期并用0值填充缺失日期的数据

本文介绍基于Python语言&#xff0c;读取一个不同的列表示不同的日期的.csv格式文件&#xff0c;将其中缺失的日期数值加以填补&#xff1b;并用0值对这些缺失日期对应的数据加以填充的方法。 首先&#xff0c;我们明确一下本文的需求。现在有一个.csv格式文件&#xff0c;其第…...

【C语言经典100例题-70】求一个字符串的长度(指针)

代码 使用指针来遍历字符串&#xff0c;直到遇到字符串结尾的空字符\0为止&#xff0c;统计字符数量即为字符串长度。 #include<stdio.h> #define n 20 int getlength(char *a) {int len 0;while(*a!\0){len;a;}return len; } int main() {char *arr[n] { 0 };int l…...

十天学完基础数据结构-第八天(哈希表(Hash Table))

哈希表的基本概念 哈希表是一种数据结构&#xff0c;用于存储键值对。它的核心思想是将键通过哈希函数转化为索引&#xff0c;然后将值存储在该索引位置的数据结构中。 哈希函数的作用 哈希函数是哈希表的关键部分。它将输入&#xff08;键&#xff09;映射到哈希表的索引位…...

flink集群部署

虚拟机配置 bigdata-hmaster 192.168.135.112 4核心 32GB bigdata-hnode1 192.168.135.113 4核心 16GB bigdata-hnode2 192.168.135.114 4核心 16GB 安装包&#xff1a;https://dlcdn.apache.org/flink/flink-1.17.1/flink-1.17.1-bin-scala_2.12.tgz 放到/usr/lcoal/lib目录…...

2.证明 非单一点 Oct.2023

目录 原题解引申出的编程问题非单一点题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题解题目正解 原题 已知等边 Δ P 0 P 1 P 2 \Delta P_0P_1P_2 ΔP0​P1​P2​&#xff0c;它的外接圆是 O O O&#xff0c;设 O O O的半径是 R R R。同时&#xff0c;设 Δ …...

常见的软件脱壳思路

单步跟踪法 1.本方法采用OD载入。 2.跟踪F8&#xff0c;实现向下的跳。 3.遇到程序回跳按F4。 4.绿色线条表示跳转没实现&#xff0c;不用理会&#xff0c;红色线条表示跳转已经实现&#xff01; 5.刚载入程序有一个CALL的&#xff0c;我们就F7跟进去&#xff0c;不然程序很容…...

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解

Python&#xff1a;torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解 1. 函数参数 在torch中的卷积操作有三个&#xff0c;torch.nn.Conv1d(),torch.nn.Conv2d()还有torch.nn.Conv3d(),这是搭建网络过程中常用的网络层&#xff0c;为了用好卷积层&#xff0…...

scala 连接 MySQL 数据库案例

1 依赖准备 mysql 8添加&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency> mysql 5 添加&#xff1a; <dependency><grou…...

guava工具类常用方法

Guava是Google开发的一个Java开源工具类库&#xff0c;它提供了许多实用的工具类和功能&#xff0c;可以简化Java编程中的常见任务。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>2…...

CSShas伪类选择器案例附注释

<!DOCTYPE html> <html lang="en"> <head><meta charset...

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…...

Kotlin中reified 关键字

前言 在开始之前&#xff0c;让我们先讨论一下泛型。泛型用于为类、函数或接口提供通用的实现。下面是一个示例泛型方法&#xff1a; fun <T> displayValue(value: T) {println(value) }fun main() {displayValue<String>("Generics")displayValue<…...

Linux命令(95)之alias

linux命令之alias 1.alias介绍 linux命令alias是用来将/bin目录下的命令进行别名设置&#xff0c;将一些较长的命令进行简化。 alias命令的作用只局限于该次登入的操作&#xff0c;相当于临时变量。 如果对当前用户永久生效&#xff0c;需修改~/.bashrc文件&#xff0c;使用…...

DHCPsnooping 配置实验(2)

DHCP报文泛洪攻击 限制接收到报文的速率 vlan 视图或者接口视图 dhcp request/ dhcp-rate dhcp snooping check dhcp-request enable dhcp snooping alarm dhcp-request enable dhcp snooping alarm dhcp-request threshold 1 超过则丢弃报文 查看[Huawei]dis dhcp statistic…...

Qt 综合练习小项目--反金币(2/2)

目录 4 选择关卡场景 4.2 背景设置 4.3 创建返回按钮 4.3 返回按钮 4.4 创建选择关卡按钮 4.5 创建翻金币场景 5 翻金币场景 5.1 场景基本设置 5.2 背景设置 5.3 返回按钮 5.4 显示当前关卡 5.5 创建金币背景图片 5.6 创建金币类 5.6.1 创建金币类 MyCoin 5.6.…...

安装matplotlib__pygame,以pycharm调入模块

安装pip 安装matplotlib 安装完毕&#xff0c;终端输入pip list检查 导入模块出现bug&#xff0c;发现不是matplotlib包的问题&#xff0c;pycharm版本貌似不兼容&#xff0c;用python编辑器可正常绘图&#xff0c;pygame也可正常导入。 ​​​​​​​ pycharm版本问题解决 终…...

编写可扩展的软件:架构和设计原则

在今天的软件开发领域&#xff0c;可扩展性是一个至关重要的概念。无论您是开发一个小型应用程序还是一个大规模的软件系统&#xff0c;都需要考虑如何使您的软件能够在不断变化的需求下进行扩展和演进。本文将探讨编写可扩展软件的关键架构和设计原则&#xff0c;以帮助开发人…...

wordpress网页怎么上传/郑州网站seo外包公司

创建一个104的sheet 清除9-10行&#xff0c;清除D列&#xff08;注意&#xff1a;不是删除行/列&#xff09; 测试代码 main() { ... Workbook workBook null; InputStream fin null; logger.info("sheet1 从10*4改成8*3后测试&#xff1a;"); fin new…...

国外做SEO网站/免费友情链接网

一个简单的控制文章行数的方法,不多说&#xff0c;先上代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><m…...

免费网站加速软件/免费隐私网站推广

各有关单位&#xff1a; 为推广我国高校数据分析实践教学&#xff0c;培养学生数据分析的应用和创新能力&#xff0c;增加校企交流合作和信息共享&#xff0c;提升我国高校的教学质量和企业的竞争能力&#xff0c;由泰迪杯数据分析技能赛组织委员会主办&#xff0c;广东泰迪智…...

自助网站制作/爱站工具包怎么使用

问题描述可视化TensorFlow Graph图的官方方法是使用TensorBoard&#xff0c;但有时我只是想在Jupyter中工作时快速浏览一下该图。有没有一种快速的解决方案&#xff0c;理想情况下基于TensorFlow工具或标准SciPy软件包(如matplotlib)&#xff0c;就能在jupyter notebook中可视化…...

政务网站开发协议/高端营销型网站制作

2009-12-07 来源&#xff1a;enterprisearchitect.cn 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件&#xff08;Computer Aided Software Engineering&#xff09;。EA不同于普通的UML画图工具&#xff08;如VISIO&#xf…...

网站建设方案书原件/百度资源平台

Reactor 和 Proactor 是基于事件驱动&#xff0c;在网络编程中经常用到两种设计模式。曾经在一个项目中用到了网络库 libevent&#xff0c;也学习了一段时间&#xff0c;其内部实现所用到的就是 Reactor&#xff0c;所知道的还有 ACE&#xff1b;Proactor 模式的库有 Boost.Asi…...