字符串操作符

首先需要明白的一点是我们通常所用的变量替代 $varname 其实是 ${varname}的一种简写形式。

其次,需要知道字符串操作的核心思想是:Bash shell字符串操作是通过在变量名‘varname‘和闭花括号‘}‘之间插入操作符来完成的。

字符串操作符在处理" ‘ ? * 等字符时需要使用\转意

grep 对字符进行查找时  " 需要加转意\   ‘不需要加

替换操作符
        ${varname:-word}
            含义:如果变量varname存在且非空, 返回变量的值;否则返回值word。
            目的:如果变量未定义,则返回默认值word。
            举例:如果变量count未定义,则:${count:-0}的值为0.
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $count  
                [email protected]/export/home/ftp/pub-->echo ${count:-0}  
                0  
                [email protected]/export/home/ftp/pub-->echo $count  
                [email protected]/export/home/ftp/pub-->  
              
        ${varname:=word}
            含义:如果变量varname存在且非空,返回变量的值;否则将变量的值设为值word后返回变量的值。
            目的:如果变量varname未定义,则将其设置为默认值word.
            举例:如果变量count未定义,则将其设为0
             
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $count  
                [email protected]/export/home/ftp/pub-->echo ${count:=0}  
                0  
                [email protected]/export/home/ftp/pub-->echo $count  
                0  
        ${varname:+word}
            含义:如果变量varname存在且非空,返回值word;否则返回null。
            目的:测试变量varname是否存在。
            举例:如果变量count存在,返回1(表示存在)
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $count  
                0  
                [email protected]/export/home/ftp/pub-->echo ${count:+1}  
                1  
                [email protected]/export/home/ftp/pub-->unset count  
                [email protected]/export/home/ftp/pub-->echo $count  
                [email protected]/export/home/ftp/pub-->echo ${count:+1}  
                [email protected]/export/home/ftp/pub-->  
        ${varname:?message}
            含义:如果变量varname存在且非空,返回变量的值;否则打印信息"varname: message";如果message没有指定,则显示parameter null or not set。
            目的:如果变量未定义,则打印错误信息。
            举例:如果变量count未定义,打印消息"count: undefined!
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $count  
                [email protected]/export/home/ftp/pub-->echo ${count:?"undefined"}  
                bash: count: undefined  
        ${varname:offset:length}
            含义:返回变量varname的子字符串,开始位置为offset,长度为length。注意索引开始位置为0。
            目的:返回子字符串。
            举例:如果变量count的值为 frogfootman,则:
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->count=frogfootman  
                [email protected]/export/home/ftp/pub-->echo ${count:4}  
                footman  
                [email protected]/export/home/ftp/pub-->echo ${count:4:4}  
                foot  
                [email protected]/export/home/ftp/pub-->

${varname/pattern/string}
            含义:用值string替换varname中模式pattern可以匹配到的最大部分。仅替换第一次匹配。
            举例:
            [c-sharp] view plaincopy
                [email protected]/-->echo $PATH

/usr/sbin:/usr/bin:/export/home/ftp/pub/:/etc/vx/bin:/opt/VRTS/bin:/opt/VRTSvcs/bin:/opt/VRTSat/bin:/sbin:/usr/sbin:/usr/local/bin:/export/home/ftp/pub/
 
                [email protected]/-->echo -e ${PATH/:/‘/n‘}  
                /usr/sbin

/usr/bin:/export/home/ftp/pub/:/etc/vx/bin:/opt/VRTS/bin:/opt/VRTSvcs/bin:/opt/VRTSat/bin:/sbin:/usr/sbin:/usr/local/bin:/export/home/ftp/pub/
 
                [email protected]/-->  
        ${varname//pattern/string}
            含义:用值string替换varname中模式pattern可以匹配到的最大部分。全局匹配。
            举例:
            [c-sharp] view plaincopy
                [email protected]/-->echo $PATH

/usr/sbin:/usr/bin:/export/home/ftp/pub/:/etc/vx/bin:/opt/VRTS/bin:/opt/VRTSvcs/bin:/opt/VRTSat/bin:/sbin:/usr/sbin:/usr/local/bin:/export/home/ftp/pub/
 
                [email protected]/-->echo -e ${PATH//:/‘/n‘}  
                /usr/sbin  
                /usr/bin  
                /export/home/ftp/pub/  
                /etc/vx/bin  
                /opt/VRTS/bin  
                /opt/VRTSvcs/bin  
                /opt/VRTSat/bin  
                /sbin  
                /usr/sbin  
                /usr/local/bin  
                /export/home/ftp/pub/  
    变量长度
        ${#varname}
             含义:获取变量varname值长度。
            举例:
            [c-sharp] view plaincopy
                [email protected]/-->echo $path  
                /export/home/ftp/pub  
                [email protected]/-->echo ${#path}  
                20  
    扩展模式匹配操作府
        注意:使用扩展模式匹配操作符时,shopt extglob必须为on .
        [c-sharp] view plaincopy
            [email protected]/tmp/ewang-->shopt extglob  
            extglob         on  
        *(patternlist)
            含义:匹配patternlist中0个或多个pattern
            举例:
            [c-sharp] view plaincopy
                [email protected]/-->var=alicealicesophie  
                [email protected]/-->echo ${var/*(alice|edward|stone)/ALICE}  
                ALICEsophie  
        +(patternlist)
            含义:匹配patternlist中1个或多个pattern
            举例:
            [c-sharp] view plaincopy
                [email protected]/-->var=alicesophiealicestone  
                [email protected]/-->echo ${var/+(alice|edward|stone)/ALICE}  
                ALICEsophiealicestone  
                [email protected]/-->echo ${var//+(alice|edward|stone)/ALICE}  
                ALICEsophieALICE  
        ?(patternlist)
            含义:匹配patternlist中0各或1个patter
        @(patternlist)
            含义:匹配patterlist中的1个pattern.
            举例:
            [c-sharp] view plaincopy
                [email protected]/-->count=123.5  
                [email protected]/-->echo ${count/@(.)/#}  
                123#5  
        !(patternlist)
            含义:匹配patterlist中所有pattern之外的pattern。
            举例:
            [c-sharp] view plaincopy
                [email protected]/tmp/ewang-->ls  
                abc  mn   tv1  vt0  vt1  vt2  vt3  
                [email protected]/tmp/ewang-->rm -fr !(vt+([0-9]))  
                [email protected]/tmp/ewang-->ls  
                vt0  vt1  vt2  vt3  
                [email protected]/tmp/ewang-->

模式匹配操作符
        ${varname#pattern}
            含义:如果pattern匹配变量varname值的开始部分,删除最小 的匹配部分并且返回变量剩余部分内容。
            举例:
             
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $path  
                /export/home/ftp/pub  
                [email protected]/export/home/ftp/pub-->echo ${path#*/}  
                export/home/ftp/pub  
        ${varname##pattern}
            含义:如果pattern匹配变量varname值的开始部分,删除最大 的匹配部分并且返回变量剩余部分内容。
            举例:
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $path  
                /export/home/ftp/pub  
                [email protected]/export/home/ftp/pub-->echo ${path##*/}  
                pub  
        ${varname%pattern}
            含义:如果pattern匹配变量varname值的结尾部分,删除最小 的匹配部分并且返回变量剩余部分内容。
            举例:
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $path  
                /export/home/ftp/pub  
                [email protected]/export/home/ftp/pub-->echo ${path%/*}  
                /export/home/ftp  
        ${varname%%pattern}
            含义:如果pattern匹配变量varname值的结尾部分,删除最大 的匹配部分并且返回变量剩余部分内容。
            举例:
            [c-sharp] view plaincopy
                [email protected]/export/home/ftp/pub-->echo $file  
                alicece  
                [email protected]/export/home/ftp/pub-->echo ${file%ce*}  
                alice  
                [email protected]/export/home/ftp/pub-->echo ${file%%ce*}  
                ali

字符串操作符,布布扣,bubuko.com

时间: 2024-10-11 06:48:57

字符串操作符的相关文章

以写代学:python 原始字符串操作符&&字符串内建函数

原始字符串操作符 (1)原始字符串操作符是为了对付那些在字符串中出现的特殊字符 (2)在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符 (3)比如在windows写路径时经常会把出现以下情况 2.字符串内建函数 (1)每次都不会改变字符串原本的值 (2)字符串.函数 或者将字符串赋值给函数后写成变量名.函数是都可以的 (3)还有很多的内涵函数,下边只是举例说明 >>> import tab        >>> hi = "

字符串操作符+和+=

//如果表达式以一个字符串起头,那么后续所有操作数必须是字符串类型 //thinking in java 书中p53 3.13  字符串操作符+和+= import static net.mindview.util.Print.*;public class StringOperators { public static void main(String []args){ int x=0,y=1,z=2; String s="x,y,z"; print(s+x+y+z); print(x

PHP 字符串 操作符<<< 使用的注意事项

在看<深入PHP和JQeury开发>过程中,遇到字符串 操作符<<<,代码没有问题,但格式却要求特别严格,找到PHP手册上的实例,翻译过来,留作后用. A string literal can be specified in four different ways: single quoted double quoted heredoc syntax nowdoc syntax (since PHP 5.3.0) Single quoted The simplest way

python学习笔记:python字符串

二.python字符串操作符 1. 对象标准类型操作符 Python对象的标准类型操作符一共就三种:对象值的比较.对象身份的比较.布尔类型.其中对象值的比较主要是大于.小于.不等于等的数学比较符:对象身份的比较主要是is和is not这两个符号:布尔类型主要是not.and.or等的逻辑运算符. 字符串标准类型操作符也是这些,在做比较操作的时候,字符串是按照ASCII值的大小来比较的. 2. 序列类型操作符 切片操作符 主要分为三种,分别是正向索引.反向索引.默认索引.下图中显示索引的编号: 注

python 学习笔记day04-python字符串、列表、元组

字符串 序列 序列类型操作符 序列操作符 作用 seq[ind] 获得下标为ind的元素 seq[ind1:ind2] 获得下标从ind1到ind2间的元素结合 seq * expr 序列重复expr次 seq1 + seq2 连接序列seq1和seq2 obj in seq 判断obj元素是否包含在seq中 obj not in seq 判断obj元素是否不包含在seq中 内建函数 函数 含义 list(iter) 把可迭代对象转换为列表 str(obj) 把obj对象转换成字符串 tuple

Java编程思想笔记(操作符)

1.更简单的打印语句:print();     2.使用Java操作符:1.例外的操作符“=”.“==”.“!=”,这些操作符能操作所有的对象.2.String支持+=.+     3.优先级     4.赋值:直接操作对象内的域容易导致混乱     4(1).方法调用中的别名问题     5.算数操作符:Random rand = new Random(47);//随机生成器对于特定的种子值总是产生相同的随机数序列     5(1).一元加.减操作符     6.自动递增和递减:++a(先加,

以写代学:python 数据类型之字符串,判断用户输入的id是否符合要求

字符串操作符 比较操作符:字符串大小按ASCLL码值大小进行比较 切片操作符:[].[:].[::] 成员关系操作符:in.not in 脚本:判断用户输入的id是否符合要求 #!/usr/bin/env python import string #定义字符的范围first_id = string.letters + "_"           //确定首字符的范围all_id = string.digits + first_id         //确定其他字符的范围 #请求用户输入

【原创】Python第二章——字符串

字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而不是修改现有的字符串. 字符串常量的表示 1. 3种表示 1 #单引号 2 A = 'Python' 3 #引号 4 B = "Python" 5 #三引号 6 C = """Python""" 2. 为什么要这么麻烦? (1)当

PostgreSQL学习手册(五) 函数和操作符

PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:    常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:    下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < 小于 > 大于 <= 小于或等于 >= 大于或等于 = 等于 != 不等于 比较操作符可以用于所有可以比较的数据类型.所有比较操作符都是双目操作符,且返回boolean类型.除了比较操作符以外,我们还可以使用BETWEEN语句,如