• shell-基础2-字符串文本处理${}


    一、为什么使用${}引用变量

      1、$a和${a}的效果与区别

        因为个别特殊字符会影响正常引用,所以需要使用${}引用变量,加花括号是为了帮助解释器识别变量的边界

        $a和${a}效果一样,当变量后面连接其他字符的时候必须给变量加上大括号${a}_bc

    [root@master ~]# VAR=111
    [root@master ~]# echo $VAR11
    
    [root@master ~]# echo $VAR
    111
    [root@master ~]# echo ${VAR}222
    111222
    [root@master ~]#   

      2、变量小知识补充 

        1)定义变量的三种方式

    [root@web1 ~]# a=111
    [root@web1 ~]# b='111'
    [root@web1 ~]# c="111"
    [root@web1 ~]# a=111-$a
    [root@web1 ~]# b='111-$a'
    [root@web1 ~]# c="111-$a"
    [root@web1 ~]# echo "a=$a"
    a=111-111
    [root@web1 ~]# echo "c=${c}"        <---$变量名表示输出变量,可以用$c或者${c}两种用法
    c=111-111-111 
    [root@web1
    ~]# echo "b=$b"
    b
    =111-$a
    [root@web1
    ~]#

          不加引号,当内容为简单连续的数字、字符串、路径名时,可以使用,值里面有变量会被解释后再输出

          加单引号,输出变量内容时,单引号里面是啥就输出啥即使是变量或命令(命令需要反引起来),这种比较适合显示纯字符串的请看

          加双引号,输出变量内容时引号里的变量及命令会经过解析后再输出内容,这种就比较适合字符串中附带有变量及命令且向将其解析后再输出的变量定义

          

        2)把一个命令结果作为变量的内容赋值的两种方法

          变量名=`ls`  <---反引号引起来,缺点容易和单引号弄混

          变量名=$(ls)  <---可以使用这种方法

           示例1

    [root@web1 ~]# hh=`ls`
    [root@web1 ~]# echo $hh
    anaconda-ks.cfg bash-test Desktop Downloads google-chrome-stable_current_x86_64.rpm initial-setup-ks.cfg original-ks.cfg
    [root@web1 ~]# hh1=$(ls)
    [root@web1 ~]# echo $hh1
    anaconda-ks.cfg bash-test Desktop Downloads google-chrome-stable_current_x86_64.rpm initial-setup-ks.cfg original-ks.cfg
    [root@web1 ~]# 

        3)详细参考请参见

           shell 学习笔记1-什么是shell,shell变量

    二、字符串文本实例

      1、获取字符串长度


    [root@node1 ~]# HLWD='hello world!' [root@node1 ~]# echo $HLWD hello world! [root@node1 ~]# echo ${#HLWD} 12 [root@node1 ~]#

      2、字符串切片

         ${parameter:offset}

         ${parameter:offset:length}

        获取从offset个字符开始,向后length个字符

    获取hello字符串
    [root@node1 ~]# echo ${HLWD:0:5} hello 获取从第二个字符后的一个字符
    [root@node1
    ~]# echo ${HLWD:2:1} l 获取从第六个字符后两个字符
    [root@node1
    ~]# echo ${HLWD:6:2} wo
    获取第五字符后面的字符 [root@node1
    ~]# echo ${HLWD:6} world!
    获取第五字符后面的字符 [root@node1 ~]# echo ${HLWD:5} world!
    获取-1字符之后的字符
    [root@node1 ~]# echo ${HLWD:-1} hello world! 获取最后一个字符
    [root@node1
    ~]# echo ${HLWD:(-1)} ! 获取最后两个字符
    [root@node1
    ~]# echo ${HLWD:(-2)} d!

      获取从倒数第三个字符后的2个字符

     [root@node1 ~]# echo ${HLWD:(-3):3}
      ld!
      [root@node1 ~]#

     

      3、替换字符串

         格式:${parameter/pattern/string}

    [root@master ~]# VAR='hello world world!'   
    将第一个world字符串替换为WORLD
    [root@master ~]# echo ${VAR/world/WORLD}
    hello WORLD world!
    将全部的world替换为WORLD
    [root@master ~]# echo ${VAR//world/WORLD} 
    hello WORLD WORLD!
    
    [root@master ~]# VAR=123abc
    替换正则表达式为空
    [root@master ~]# echo ${VAR//[^0-9]/}
    123
    [root@master ~]# echo ${VAR/[0-9]/}
    23abc
    [root@master ~]# echo ${VAR/[0-9][0-9][0-9]/}
    abc

      4、字符串截取

        格式:${parameter#word} 删除匹配前缀 

              ${parameter##word} 

           ${parameter%word} 删除匹配后缀

           ${parameter%%word}

        说明:#去掉左边,最短匹配模式,##最长匹配模式

             #去掉右边,最短匹配模式,%%最长匹配模式

    如果变量为空就返回hello world!
    [root@master ~]# VAR=
    [root@master ~]# echo ${VAR:-'hello world!'}
    hello world!
    如果变量不为空就返回hello world!
    [root@master ~]# VAR="hello"
    [root@master ~]# echo ${VAR:+' world!'}
     world!
    [root@master ~]# echo ${VAR:+'hello world!'}
    hello world!
    如果变量空就重新赋值
    [root@master ~]# 
    [root@master ~]# VAR=
    [root@master ~]# echo ${VAR:=hello}
    hello
    [root@master ~]# echo $VAR
    hello
    如果变量为空就将信息输出stderr
    [root@master ~]# VAR=
    [root@master ~]# echo ${VAR:?value is null }
    -bash: VAR: value is null 

      5、字符串颜色

         使用方法请见shell 学习笔记8-case条件语句里面的2-3小节

    参考:《shell从入门到精通》---李振良

    转载请注明出处: https://www.cnblogs.com/zhangxingeng/p/11794283.html

  • 相关阅读:
    北京 到 娄底 灌湄
    AVR--IO设置编程
    AVR--I/O端口寄存器
    AVR--IO结构分析
    虚拟机VM下 UBUNTU 下安装Mantis
    Windows环境下Mantis搭建概述
    SW4STM32 : Error message from debugger back end: Error erasing flash with vFlashErase packet Error erasing flash with vFlashErase packet
    三极管驱动继电器详解
    STM32 Bootloader 跳转到App
    (转载) STM32IAP升级---IAP升级功能编写初期的一些困惑与疑问---完成功能后的总结
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/11794283.html
Copyright © 2020-2023  润新知