变量替换
设置变量为只读
先对一个变量赋值,再对变量readonly ,任何用户不能对只读变量进行重新赋值
a=ccc
readonly a
对变量的路径进行操作,先判断路径是不是非空
1、判断一个变量是否定义
zzx@ubuntu:~$ echo $test #test没定义
zzx@ubuntu:~$ result=${test:-UNSET}
zzx@ubuntu:~$ echo $result #$result返回UNSET UNSET可以自己定义为其他字符
UNSET
zzx@ubuntu:~$ echo $test # test还是没定义 结果为空
#空行
第二行 : CRON_VALIDATE_MAILRCPTS不为空 && 就吧$t赋值给 CRON_VALIDATE_MAILRCPTS
~~~~~~~~~~~~~~~
zzx@ubuntu:~$ test="nihao" #定义test
zzx@ubuntu:~$ result=${test:-UNSET}
zzx@ubuntu:~$ echo $result
nihao
zzx@ubuntu:~$ echo $test
nihao
2、
zzx@ubuntu:~$ unset test
zzx@ubuntu:~$ echo $test
zzx@ubuntu:~$ result=${test:=UNSET}
zzx@ubuntu:~$ echo $result
UNSET
zzx@ubuntu:~$ echo $test #test原本没定义现在被定义为UNSET
UNSET
3、 ?捕捉变量是否定义
zzx@ubuntu:~$ value=1
zzx@ubuntu:~$ echo ${value:?"sorry,value not definde"}
1
zzx@ubuntu:~$ unset value
zzx@ubuntu:~$ echo ${value:?"sorry,value not definde"}
-bash: value: sorry,value not definde
4、 + 测试变量是否存在
zzx@ubuntu:~$ r=${value:+1}
zzx@ubuntu:~$ echo $r
zzx@ubuntu:~$ value="hello world"
zzx@ubuntu:~$ echo $r
zzx@ubuntu:~$ r=${value:+1}
zzx@ubuntu:~$ echo $r
1
5 - 变量没定义就用-号后面的代替,去掉冒号 ${value-world}
防止path1没定义 把根删了 没定义就用/tmp赋值给path1
#path存在就用path path不存在就用 path:=/tmp
(5) ${value:offset}
${value:offset:length} 从变量中提取子串,这里offset和length可以是算术表达式.
(6) ${#value}
变量的字符个数
zzx@sdcm152:~$ a=nihao
zzx@sdcm152:~$ echo ${#a}
5
zzx@sdcm152:~$ a="nihao"
zzx@sdcm152:~$ echo ${#a}
5
zzx@sdcm152:~$ a="hel,lo"
zzx@sdcm152:~$ echo ${#a}
6
zzx@sdcm152:~$ a="hel,l@"
zzx@sdcm152:~$ echo ${#a}
6
zzx@sdcm152:~$ echo ${a#he}
l,l@
zzx@sdcm152:~$ echo ${a/@/o}
hel,lo
(7) ${value#pattern}
${value##pattern}
去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配
#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.
(8) ${value%pattern}
${value%%pattern}
于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样
(9) ${value/pattern/string}
${value//pattern/string}
进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同
注意: 上述条件变量替换中,除(2)外,其余均不影响变量本身的值