zoukankan      html  css  js  c++  java
  • linux 内置函数 操作

    本文转自:http://blog.csdn.net/chaofanwei/article/details/17377451

    本文会做少量改动。

    一:判断读取字符串值

    表达式        含义
    ${var}        变量var的值, 与$var相同
    ${var-DEFAULT}    如果var没有被声明, 那么就以DEFAULT作为其值 
    ${var:-DEFAULT}    如果var没有被声明, 或者其值为空, 那么就以DEFAULT作为其值 
    ${var=DEFAULT}    如果var没有被声明, 那么就以DEFAULT作为其值 ,还会把DEFAULT赋值给var
    ${var:=DEFAULT}    如果var没有被声明, 或者其值为空, 那么就以DEFAULT作为其值,还会把DEFAULT赋值给var
    ${var+OTHER}    如果var声明了, 那么其值就是OTHER, 否则就为null字符串
    ${var:+OTHER}    如果var被设置了, 那么其值就是OTHER, 否则就为null字符串
    ${var?ERR_MSG}    如果var没被声明, 那么就打印ERR_MSG 
    ${var:?ERR_MSG}    如果var没被设置, 那么就打印ERR_MSG 
    ${!varprefix*}    匹配之前所有以varprefix开头进行声明的变量
    ${!varprefix@}    匹配之前所有以varprefix开头进行声明的变量

    实例1:${var-DEFAULT}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"  ##声明变量var
    var1=""    ##声明变量,var1,但是值是空的。但是如果这样赋值 var1=" ",居然认为不是空值。
    
    echo "${var-testvar}"
    echo "${var1-testvar1}"
    echo "${var2-testvar2}"
    [root@cong-55 tmp]# sh /tmp/test.sh 
    abcdef  ##因为有声明var变量,所以直接打印了var的值
           ##因为有声明var1变量,所以直接打印了var1的值
    testvar  ##没有声明var2变量,所以打印了testvar2字符串。
    [root@cong-55 tmp]#

    实例2:${var:-DEFAULT}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=""
    
    echo "${var:-testvar}"
    echo "${var1:-testvar1}"
    echo "${var2:-testvar2}"
    [root@cong-55 tmp]# sh test.sh 
    abcdef    ##因为var有声明定义,所以直接打印var的值
    testvar1   ##因为var1的值为空值,所以打印tetvar1字符串
    testvar2   ####因为var2的值为空值,所以打印tetvar2字符串
    [root@cong-55 tmp]# 

    实例3:${var=DEFAULT}  

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=""
    
    echo "${var=testvar}"
    echo "${var1=testvar1}"
    echo "${var2=testvar2}"
    echo "${var2}"
    [root@cong-55 tmp]# sh test.sh  
    abcdef
    
    testvar2
    testvar2  ##定义了var2,并把testvar2赋值给var2.
    [root@cong-55 tmp]#

    实例4:${var:=DEFAULT}

    [root@cong-55 tmp]# cat test.sh 
    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=""
    
    echo "${var:=testvar}"
    echo "${var1:=testvar1}"
    echo "${var2:=testvar2}"
    echo "${var2}"
    [root@cong-55 tmp]# sh test.sh  
    abcdef
    testvar1
    testvar2
    testvar2  ##定义并赋值给var2
    [root@cong-55 tmp]# 

    实例5:${var+OTHER}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=""
    
    echo "${var+testvar}"
    echo "${var1+testvar1}"
    echo "${var2+testvar2}"
    echo "${var2}"
    [root@cong-55 tmp]# sh test.sh  
    testvar  ##因为定义了var,所以打印testvar字符串
    testvar1  ##因为定义了var1,所以打印testvar1字符串
          ##var2没有被定义,所以打印null值

    实例6:${var:+OTHER}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=""
    
    echo "${var:+testvar}"
    echo "${var1:+testvar1}"
    echo "${var2:+testvar2}"
    echo "${var2}"
    [root@cong-55 tmp]# sh test.sh  
    testvar  ##因为var被声明并且不为空,所以打印testvar
          ##因为var1被声明,但是var的值为空,所以打印空值
           ##因为var2没有声明,所以打印空值。如果值为空或不声明就会打印空值。
    
    [root@cong-55 tmp]#

    实例7:${!varprefix*} 

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=" "
    var2="123456"
    
    echo "${!var*}"
    [root@cong-55 tmp]# sh test.sh 
    var var1 var2
    [root@cong-55 tmp]# 

    实例8:${!varprefix@} 

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=" "
    var2="123456"
    
    echo "${!var@}"
    [root@cong-55 tmp]# sh test.sh  
    var var1 var2
    [root@cong-55 tmp]# 

    二。字符串操作(长度,读取,替换)

    ${#string}        $string的长度
    ${string:position}    在$string中, 从位置$position开始提取子串
    ${string:position:length}    在$string中, 从位置$position开始提取长度为$length的子串
    ${string#substring}    从变量$string的开头, 删除最短匹配$substring的子串
    ${string##substring}    从变量$string的开头, 删除最长匹配$substring的子串
    ${string%substring}    从变量$string的结尾, 删除最短匹配$substring的子串
    ${string%%substring}    从变量$string的结尾, 删除最长匹配$substring的子串
    ${string/substring/replacement}    使用$replacement, 来代替第一个匹配的$substring
    ${string//substring/replacement}    使用$replacement, 代替所有匹配的$substring
    ${string/#substring/replacement}    如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
    ${string/%substring/replacement}    如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

    实例1: ${string:position:length} 

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="abcdef"
    var1=" "
    var2="123456"
    
    echo "${var:2:3}"  ##从第二个字符开始,截取3个字符。字符从0开始,比如a是第0个,b是第1个,c是第2个,所以是cde
    [root@cong-55 tmp]# sh test.sh 
    cde
    [root@cong-55 tmp]#

    实例2:${string#substring}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="aa/bb/cc/dd/test.txt"
    
    echo "${var#/}"
    echo "${var#*/}"    ##删除从字符串的开头,到第一个‘/’字符的内容
    [root@cong-55 tmp]# sh test.sh  
    aa/bb/cc/dd/test.txt
    bb/cc/dd/test.txt
    [root@cong-55 tmp]#

    实例3:${string##substring

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="aa/bb/cc/dd/test.txt"
    
    echo "${var##/}"
    echo "${var##*/}"  ####删除从字符串的开头,到最后一个‘/’字符的内容
    [root@cong-55 tmp]# sh test.sh  
    aa/bb/cc/dd/test.txt
    test.txt
    [root@cong-55 tmp]#

    实例4:${string%substring}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="aa/bb/cc/dd/test.txt"
    
    echo "${var%/}"
    echo "${var%/*}"  ##删除从字符串的结尾开始,到前一个‘/’字符的内容
    [root@cong-55 tmp]# sh test.sh  
    aa/bb/cc/dd/test.txt
    aa/bb/cc/dd
    [root@cong-55 tmp]#

    实例5:${string%%substring}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="aa/bb/cc/dd/test.txt"
    
    echo "${var%%/}"
    echo "${var%%/*}"    ##删除从字符串的结尾开始,到最前一个‘/’字符的内容
    [root@cong-55 tmp]# sh test.sh  
    aa/bb/cc/dd/test.txt
    aa
    [root@cong-55 tmp]#

    ${变量名#substring正则表达式}从字符串开头开始配备substring,删除匹配上的表达式。

    ${变量名%substring正则表达式}从字符串结尾开始配备substring,删除匹配上的表达式。

    注意:${test##*/},${test%/*} 分别是得到文件名,或者目录地址最简单方法。

    实例6:${string/substring/replacement}

    [root@cong-55 tmp]# cat test.sh  
    #!/bin/bash
    #
    var="aa/bb/cc/dd/test.txt"
    
    echo "${var/aa/ZZ}"    ##使用ZZ替换提一个aa
    [root@cong-55 tmp]# sh test.sh  
    ZZ/bb/cc/dd/test.txt
    [root@cong-55 tmp]#

    实例7:${string//substring/replacement}

    [root@cong-55 tmp]# cat test.sh  
    #!/bin/bash
    #
    var="aa/bb/aa/dd/aa/aa.txt"
    
    echo "${var//aa/ZZ}"  ##使用ZZ字符替换字符串中所有的aa字符
    [root@cong-55 tmp]# sh test.sh  
    ZZ/bb/ZZ/dd/ZZ/ZZ.txt
    [root@cong-55 tmp]# 

    实例8:${string/#substring/replacement}

    [root@cong-55 tmp]# cat test.sh 
    #!/bin/bash
    #
    var="aa/bb/aa/dd/aa/aa.txt"
    
    echo "${var/#aa/ZZ}"
    [root@cong-55 tmp]# sh test.sh  
    ZZ/bb/aa/dd/aa/aa.txt
    [root@cong-55 tmp]#

    实例9:${string/%substring/replacement}

    [root@cong-55 tmp]# cat test.sh  
    #!/bin/bash
    #
    var="aa/bb/aa/dd/aa/aa.txt"
    
    echo "${var/%txt/ZZ}"
    [root@cong-55 tmp]# sh test.sh  
    aa/bb/aa/dd/aa/aa.ZZ
    [root@cong-55 tmp]#
  • 相关阅读:
    质数检测器
    《视觉SLAM十四讲》学习日志(一)——预备知识
    C++类的介绍
    Python数据类型解析(基础篇)
    括号匹配详解
    哈夫曼树编码
    分治之归并,快速排序
    洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵
    洛谷p1886滑动窗口最大最小值 双单调队列
    洛谷p1725 露琪诺 单调队列优化的DP
  • 原文地址:https://www.cnblogs.com/LYCong/p/7929512.html
Copyright © 2011-2022 走看看