变量内容的删除、替代与替换
##:从变量内容最前面开始向右删除符合替换文字的“最长的”那一个。
例子:
[root@www ~]# Dir=/usr/local/src [root@www ~]# echo $Dir /usr/local/src [root@www ~]# echo ${Dir#*/} usr/local/src [root@www ~]# echo ${Dir##*/} src
[root@www ~]# Dir=/usr/local/src/usr/local/src [root@www ~]# echo $Dir /usr/local/src/usr/local/src [root@www ~]# echo ${Dir/usr/USR} /USR/local/src/usr/local/src [root@www ~]# echo ${Dir//usr/USR} /USR/local/src/USR/local/src
变量设置方式 | 功能 |
${var#keyword} | 变量内容从头开始的数据符合“keyword”,则将符合的最短数据删除 |
${var##keyword} | 变量内容从头开始的数据符合“keyword”,则将符合的最长数据删除 |
${var%keyword} | 变量内容从尾向前的数据符合“keyword”,则将符合的最短数据删除 |
${var%%keyword} | 变量内容从尾向前的数据符合“keyword”,则将符合的最长数据删除 |
${var/old_str/new_str} | 变量内容符合“old_str”,则第一个old_str会被new_str替换 |
${var//old_str/new_srt} | 变量内容符合“old_str”,则全部的old_str会被new_str替换 |
变量的设置方式 | str没有设置 | str为空字符串 | str已经设置自为非空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var={str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr | str不变 var= | str不变 var=$str |
var={str:=expr} | str=expr var=expr | str=expr var=expr | str不变 var=$str |
var=${str?expr} | expr输出至stderr | var= | var=str |
var=${str:?expr} | expr输出至stderr | expr输出至stderr | var=str |
[root@www ~]# unset FQDN #变量没有设置 [root@www ~]# echo $FQDN [root@www ~]# echo ${FQDN:-www.snkof.com} #变量没有设置,使用word的值替换变量的值 www.snkof.com [root@www ~]# FQDN='' #变量设置为空字符串 [root@www ~]# echo ${FQDN:-www.snkof.com} #如果变量为空字符串则使用word的值替换变量的值 www.snkof.com [root@www ~]# FQDN=www.google.com.hk #变量设置了值 [root@www ~]# echo ${FQDN:-www.snkof.com} #变量使用默认值 www.google.com.hk [root@www ~]# echo $FQDN #变量依然使用默认值 www.google.com.hk
[root@www ~]# unset FQDN #变量未设置 [root@www ~]# echo $FQDN [root@www ~]# echo ${FQDN:=www.snkof.com} #变量未设置,使用word的值替换成变量的默认值 www.snkof.com [root@www ~]# echo $FQDN #并且将word的值设置为FQDN变量的默认值 www.snkof.com [root@www ~]# FQDN='' #变量设置为空字符串 [root@www ~]# echo ${FQDN:=www.snkof.com} #如果变量为字符串则使用word的值替换成变量的默认值 www.snkof.com [root@www ~]# echo $FQDN #并且将word的值设置为FQDN变量的默认值 www.snkof.com [root@www ~]# FQDN=www.google.com.hk #变量设置了值 [root@www ~]# echo ${FQDN:=www.snkof.com} #使用变量的默认值 www.google.com.hk [root@www ~]# echo $FQDN #变量的默认值没有生发改变 www.google.com.hk
[root@www ~]# unset FQDN [root@www ~]# echo ${FQDN:?novalue} -bash: FQDN: novalue #错误信息 [root@www ~]# echo $FQDN #FQDN没有任何值,只会显示错误信息给予警示。
这个错误信息将会定向至标准错误输出
[root@www ~]# echo $FQDN #FQDN本身为空值 [root@www ~]# echo ${FQDN:+www.google.com.hk} #什么也没有做 [root@www ~]# echo $FQDN #FQDN还是为空值 [root@www ~]# FQDN=www.google.com.hk #给FQDN赋值 [root@www ~]# echo ${FQDN:+www.snkof.com} www.snkof.com #如果变量有值,则替换成word的值 [root@www ~]# echo $FQDN www.google.com.hk #但是FQDN的值不会被改变