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

相关推荐
小Tomkk24 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊25 分钟前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
木卫二号Coding27 分钟前
第七十九篇-E5-2680V4+V100-32G+llama-cpp编译运行+Qwen3-Next-80B
linux·llama
getapi35 分钟前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
消失的旧时光-19431 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑1 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
Trouvaille ~1 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
旖旎夜光2 小时前
Linux(13)(中)
linux·网络
威迪斯特3 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.3 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器