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]#
原文地址:https://www.cnblogs.com/LYCong/p/7929512.html