Alex_McAvoy

想要成为渔夫的猎手

Shell 变量内容的删除与替换

【变量内容的删除与替换】

变量内容的删除与替换,具体方式可参考下表

变量设置方式 说明
${变量#关键字} 若变量内容从头开始的数据符合关键字,则将符合的最短数据删除
${变量##关键字} 若变量内容从头开始的数据符合关键字,则将符合的最长数据删除
${变量%关键字} 若变量内容从尾向前的数据符合关键字,则将符合的最短数据删除
${变量%%关键字} 若变量内容从尾向前的数据符合关键字,则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合旧字符串,则将第一个旧字符串用新字符串代替
${变量//旧字符串/新字符串} 若变量内容符合旧字符串,则将所有旧字符串用新字符串代替

以环境变量 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... 语句来进行处理

感谢您对我的支持,让我继续努力分享有用的技术与知识点!