【变量内容的删除与替换】
变量内容的删除与替换,具体方式可参考下表
变量设置方式 | 说明 |
---|---|
${变量#关键字} |
若变量内容从头开始的数据符合关键字,则将符合的最短数据删除 |
${变量##关键字} |
若变量内容从头开始的数据符合关键字,则将符合的最长数据删除 |
${变量%关键字} |
若变量内容从尾向前的数据符合关键字,则将符合的最短数据删除 |
${变量%%关键字} |
若变量内容从尾向前的数据符合关键字,则将符合的最长数据删除 |
${变量/旧字符串/新字符串} |
若变量内容符合旧字符串,则将第一个旧字符串用新字符串代替 |
${变量//旧字符串/新字符串} |
若变量内容符合旧字符串,则将所有旧字符串用新字符串代替 |
以环境变量 PATH 为例,先自定义一个变量 path,令其值等于 PATH,可以发现,在变量中,是通过 :
来分隔目录的
假设要删除第一个目录,有:
若想要删除最后一个目录,有:
若想将变量中所有的 bin 替换为大写的 BIN,有:
【变量测试与内容替换】
在某些时刻,需要判断某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给一个常用的设置
对于变量 var 与 str,当想要针对 str 的具体值来决定 var 的值时,可参考下表
变量设置方式 | 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 |
以 var=${str-expr}
为例,由于打印变量 test 后出现空白,无法确定是不存在还是空字符串,在使用 -
进行测试与内容替换后,test 的值被改为 “hello world”
而当变量 test 存在时,会使用原有的值
需要说明的是,上述的变量测试可以通过 Shell 脚本内的 if...then...
语句来进行处理