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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125716.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

一、MQ基本介绍 MQ&#xff08;message queue&#xff09;&#xff1a;本质上是个队列&#xff0c;遵循FIFO原则&#xff0c;队列中存放的是message&#xff0c;是一种跨进程的通信机制&#xff0c;用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之…

unity脚本_Vector3 c#

接下来学习 相对世界坐标 首先我们给场景物体一个空物体 修改新建空物体名字为GameObjectFather 修改GameObjectFather坐标 修改GameObject2坐标 然后将GameObjectFahter设置成GameObject2的父物体 我们观察到子物体的坐标改变了但是 运行显示的相对世界坐标this.transform.po…

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法 Line Search Newton-CG, Trust Region Newton-CG 往期回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbro…

基于STM32 ZigBee无线远程火灾报警监控系统物联网温度烟雾

实践制作DIY- GC00168---ZigBee无线远程监控系统 一、功能说明&#xff1a; 基于STM32单片机设计---ZigBee无线远程监控系统 二、功能说明&#xff1a; 1个主机&#xff1a;STM32F103C系列单片机LCD1602显示器蜂鸣器 ZigBee无线模块3个按键&#xff08;设置、加、减&#xff0…

idea清空缓存类

解决办法 网上有很多是让你去清空什么maven依赖&#xff0c;但假如这个项目是你不可以大刀阔斧的话 可以清空idea缓存 选择 Invalidate 开头的 然后全选 运行重启idea OK

osgPBR(十五)镜面IBL--查看不同级别的HDR环境贴图

首先&#xff0c;设置可以使用Mipmap&#xff0c;启用三线性过滤&#xff0c;设置最大级别和最小级别 osg::ref_ptr<osg::TextureCubeMap> tcm new osg::TextureCubeMap; tcm->setTextureSize(128, 128);tcm->setFilter(osg::Texture::MIN_FILTER, osg::Texture:…

【Java】猫和狗接口版本思路分析

目录 猫&#x1f431;和狗&#x1f415;&#xff08;接口版本&#xff09; 画图分析 案例代码 猫&#x1f431;和狗&#x1f415;&#xff08;接口版本&#xff09; 需求&#xff1a;对猫和狗进行训练&#xff0c;它们就可以跳高了&#xff0c;这里加入了跳高功能&#xff0…

阿里云服务器镜像系统Anolis OS龙蜥详细介绍

阿里云服务器Anolis OS镜像系统由龙蜥OpenAnolis社区推出&#xff0c;Anolis OS是CentOS 8 100%兼容替代版本&#xff0c;Anolis OS是完全开源、中立、开放的Linux发行版&#xff0c;具备企业级的稳定性、高性能、安全性和可靠性。目前阿里云服务器ECS可选的Anolis OS镜像系统版…

理解自动驾驶感知技术

理解自动驾驶感知技术 文章目录 什么是自动驾驶感知技术&#xff1f;自动驾驶感知技术的关键组成部分1. 雷达&#xff08;Radar&#xff09;2. 摄像头&#xff08;Camera&#xff09;3. 激光雷达&#xff08;Lidar&#xff09;4. 超声波传感器&#xff08;Ultrasonic Sensors&a…

Dubbo3应用开发—Dubbo注册中心引言

Dubbo注册中心引言 什么是Dubbo注册中心 Dubbo的注册中心&#xff0c;是Dubbo服务治理的⼀个重要的概念&#xff0c;他主要用于 RPC服务集群实例的管理。 注册中心的运行流程 使用注册中心的好处 可以有效的管理RPC集群的健康情况&#xff0c;动态的上线或者下线服务。让我…

MySQL 锁分类和详细介绍

锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff0c;在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源&#xff0c;锁机制是保证数据一致性和并发性的重要手段&#xff0c;它…

【实操记录】Oracle数据整库同步至Apache Doris

本文是Oracle数据整库同步至Apache Doris实操记录&#xff0c;仅供参考 参考&#xff1a;https://cn.selectdb.com/blog/104 1、Oracle 配置 [rootnode1 oracle]# pwd /u01/app/oracle [rootnode1 oracle]# mkdir recovery_area [rootnode1 oracle]# chown -R oracle:dba re…