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

摘要:
获取-1个字符后的字符[root@node1~]#echo${HLWD:-1}helloworld!从最后三个字符中获取2个字符[root@node1~]#echo${HLWD:(-3):3}ld![ root@node1~]#3.替换字符串格式:${parameter/patter/string}[root@master~]#VAR='helloworld!'将第一个世界字符串替换为world[root@master~]#echo${VAR/world/world}helloWORLDworld![ 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][9-9]/}abc 4.字符串截断格式:${parameter#word}删除匹配前缀${arameter#word}${参数%word}移除匹配后缀${参数%%word}描述:#删除左侧和最短匹配模式,##最长匹配模式#删除右侧和最短的匹配模式,%%最长匹配图案如果变量为空,返回helloworld!

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

  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-基础2-字符串文本处理${}第1张

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

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

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

免责声明:文章转载自《shell-基础2-字符串文本处理${}》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇openstack 5大组件之间的关系和基本架构思维导图python 绘图---2D、3D散点图、折线图、曲面图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

五种回归方法的比较

 引言  线性和逻辑回归通常是人们为机器学习和数据科学学习的第一个建模算法。 两者都很棒,因为它们易于使用和解释。 然而,它们固有的简单性也有一些缺点,在许多情况下它们并不是回归模型的最佳选择。 实际上有几种不同类型的回归,每种都有自己的优点和缺点。   在这篇文章中,我们将讨论5种最常见的回归算法及其属性,同时评估他们的性能。 最后,希望让您更全面地了解...

java之static变量与全局、局部变量的区别

static变量与全局、局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其...

var和let区别简述

   因为习惯用var声明变量,以至于ES6出了let来替代var,我依然继续用var,直到后来慢慢了解let之后,开始尝试使用     不同点:       ①:var属于ES5规范,let属于ES6规范      ②:var有预处理机制,let没有。预处理机制也就是常说的声明提前       声明提前:不管变量被声明在函数什么位置,所有变量声明都会被提...

JS字符编码----ASCII,Unicode 和 UTF-8

转:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 1.ASCII 码 八个二进制位就可以组合出256种状态,这被称为一个字节(byte) 使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符...

C11中的Unicode

在C11(ISO/IEC 9899:2011)标准中引入了对UTF8、UTF16以及UTF32字符编码的支持。 其中,UTF8字符直接通过char来定义,字面量前缀使用u8。比如: char c = u8'你'; const char *s = u8"你好"; 而UTF16字符直接通过char16_t来定义,字面量前缀使用u。比如: #include &...

VC6.0 error LNK2001: unresolved external symbol _main解决办法

学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。初学者在学习VC++的过程中,遇到的LNK2001错误的错误消...