• 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'>'

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

    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 "">"

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

    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逻辑卷扩容和缩减的方法
    socket实现简单聊天【linux】
    软件工程——名词解释
    数字出版的资源管理系统软件开发
    7. CSS 网格布局
    什么是 360 评估?
    2023年最新一面二面通关王炸java八股文面试题--持续更新
    数据结构:二叉查找树
    长文 or 短文?
    线程安全实例 --- 计时器
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/133576962