最新消息:阿啰哈,本人90后,目前单身,欢迎妹子们来撩!.(。→‿←。)

变量内容的删除、取代与替换

Shell 林志斌 990浏览
变量配置方式 说明
${变量#关键词}
${变量##关键词}
若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除
若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
${变量%关键词}
${变量%%关键词}
若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除
若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除
${变量/旧字符串/新字符串}
${变量//旧字符串/新字符串}
若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』
[[email protected] ~]# path=${PATH}
[[email protected] ~]# echo $path
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
${变量#关键词}
练习:把第一个目录删除(/开始,:结尾,*表示中间是任意长度的字符):
[[email protected] ~]# echo ${path#/*:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
练习:[[email protected] ~]# echo ${path#/*/bin}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
练习:[[email protected] ~]# echo ${path#/*root}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/bin
练习:[[email protected] ~]# echo ${path#*/bin:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
${变量##关键词}
练习:[[email protected] ~]# echo ${path##*bin:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/root/bin
练习:[[email protected] ~]# echo ${path##*sbin:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/bin:/root/bin
练习:[[email protected] ~]# echo ${path##*local}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
${变量%关键词}
练习:[[email protected] ~]# echo ${path%/u*n}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:
[[email protected] ~]# echo ${path%n:*n}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bi
[[email protected] ~]# echo ${path%local*n}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/local/sbin:/usr/
${变量%%关键词}
练习:[[email protected] ~]# echo ${path%%:/*n}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/local/sbin
练习:[[email protected] ~]# echo ${path%%/bin*n}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/local/sbin:/usr/local
练习:[[email protected] ~]# echo ${path%%/sbin*n}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/usr/local
${变量/旧字符串/新字符串}
练习:[[email protected] ~]# echo ${path/usr/USR}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/USR/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
练习:[[email protected] ~]# echo ${path/:/bin/:KASHU}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/local/sbin:/usr/local/bin:/sbin:KASHU:/usr/sbin:/usr/bin:/root/bin
练习:[[email protected] ~]# echo ${path/local//}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
${变量//旧字符串/新字符串}
练习:[[email protected] ~]# echo ${path//bin/BIN}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/local/sBIN:/usr/local/BIN:/sBIN:/BIN:/usr/sBIN:/usr/BIN:/root/BIN
练习:[[email protected] ~]# echo ${path///bin//BIN}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/local/sbin:/usr/local/BIN:/sbin:/BIN:/usr/sbin:/usr/BIN:/root/BIN
练习:[[email protected] ~]# echo ${path//:/#}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/local/sbin#/usr/local/bin#/sbin#/bin#/usr/sbin#/usr/bin#/root/bin
练习:[[email protected] ~]# echo ${path//:/}
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/local/sbin/usr/local/bin/sbin/bin/usr/sbin/usr/bin/root/bin

练习:[[email protected] ~]# echo ${path//:/ }
原值:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
结果:/usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin /root/bin

变量的测试与内容替换

变量配置方式 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

在某些时刻我们常常需要『判断』某个变量是否存在,若变量存在则使用既有的配置,若变量不存在则给予一个常用的配置。 我们举底下的例子来说明好了,看看能不能较容易被你所理解呢!

范例一:测试一下是否存在 username 这个变量,若不存在则给予 username 内容为 root
[[email protected] ~]# echo $username
           <==由于出现空白,所以 username 可能不存在,也可能是空字符串
[[email protected] ~]# username=${username-root}
[[email protected] ~]# echo $username
root       <==因为 username 没有配置,所以主动给予名为 root 的内容。
[[email protected] ~]# username="vbird tsai" <==主动配置 username 的内容
[[email protected] ~]# username=${username-root}
[[email protected] ~]# echo $username
vbird tsai <==因为 username 已经配置了,所以使用旧有的配置而不以 root 取代

在上面的范例中,重点在于减号『 - 』后面接的关键词!基本上你可以这样理解:

new_var=${old_var-content}
   新的变量,主要用来取代旧变量。新旧变量名称其实常常是一样的

new_var=${old_var-content}
   这是本范例中的关键词部分!必须要存在的哩!

new_var=${old_var-content}
   旧的变量,被测试的项目!

new_var=${old_var-content}
   变量的『内容』,在本范例中,这个部分是在『给予未配置变量的内容』
不过这还是有点问题!因为 username 可能已经被配置为『空字符串』了!果真如此的话,那你还可以使用底下的范例来给予 username 的内容成为 root 喔!

范例二:若 username 未配置或为空字符串,则将 username 内容配置为 root
[[email protected] ~]# username=""
[[email protected] ~]# username=${username-root}
[[email protected] ~]# echo $username
      <==因为 username 被配置为空字符串了!所以当然还是保留为空字符串!
[[email protected] ~]# username=${username:-root}
[[email protected] ~]# echo $username
root  <==加上『 : 』后若变量内容为空或者是未配置,都能够以后面的内容替换!
在大括号内有没有冒号『 : 』的差别是很大的!加上冒号后,被测试的变量未被配置或者是已被配置为空字符串时, 都能够用后面的内容 (本例中是使用 root 为内容) 来替换与配置!

转载请注明:林志斌 » 变量内容的删除、取代与替换

发表评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址