[root@linux ~]# echo $HOME [root@linux ~]# echo ${HOME} |
1. 完整呈现 vbird 这个变量的内容; [root@linux ~]# vbird="/home/vbird/testing/testing.x.sh" [root@linux ~]# echo ${vbird} /home/vbird/testing/testing.x.sh 2. 在 vbird 变量中,从最前面开始比对,若开头为 / ,则删除两个 / 之间的所有数据,亦即 /*/ [root@linux ~]# echo ${vbird##/*/} testing.x.sh <==删除了 /home/vbird/testing/ [root@linux ~]# echo ${vbird#/*/} vbird/testing/testing.x.sh <==仅删除 /home/ 而已 # 这两个小例子有趣了~变量名称后面如果接了两个 ## ,表示在 ## # 后面的字符串取『最长的』那一段;如果仅有一个 # ,表示取『最小的那一段』喔! 3. 承上题,如果是从后面开始,删除 /* 呢? [root@linux ~]# echo ${vbird%%/*/} /home/vbird/testing/testing.x.sh <==都没被删除 [root@linux ~]# echo ${vbird%%/*} <==被删除光了! [root@linux ~]# echo ${vbird%/*} /home/vbird/testing <==只删除 /testing.x.sh 部分 # 这个例子当中需要特别注意,那个 % 比对的是『最后面那个字符』的意思, # 所以啰,第一个方式当然不对~因为 vbird 这个变量的内容最后面是 h 而不是 / 啊! # 至于 %%/* 则是删除『最长的那个 /* 』,当然就是全部喔!而 %/* 则是最短的那个! 4. 将 vbird 变数中的 testing 取代为 TEST [root@linux ~]# echo ${vbird/testing/TEST} /home/vbird/TEST/testing.x.sh [root@linux ~]# echo ${vbird//testing/TEST} /home/vbird/TEST/TEST.x.sh # 如果变量后面接的是 / 时,那么表示后面是进行『取代』的工作~而且仅取代『第一个』 # 但如果是 // ,则表示全部的字符串都取代啊! |
| Tips: 底下的例子当中,那个 var 与 str 为变量,我们想要针对 str 是否有设定来决定 var 的值喔! 一般来说, str: 代表『str 没设定或为空的字符串时』;至于 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 |
范例一:若 str 这个变量内容存在,则 var 设定为 str ,否则 var 设定为 "newvar"
[root@linux ~]# unset str; var=${str-newvar}
[root@linux ~]# echo var="$var", str="$str"
var=newvar, str= <==因为 str 不存在,所以 var 为 newvar
[root@linux ~]# str="oldvar"; var=${str-newvar}
[root@linux ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar <==因为 str 存在,所以 var 等于 str 的内容
--------------------------------------
范例二:若 str 不存在,则 var 与 str 均设定为 newvar,否则 var 与 str 相同
[root@linux ~]# unset str; var=${str=newvar}
[root@linux ~]# echo var="$var", str="$str"
var=newvar, str=newvar <==因为 str 不存在,所以 var/str 均为 newvar
[root@linux ~]# str="oldvar"; var=${str=newvar}
[root@linux ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar <==因为 str 存在,所以 var 等于 str 的内容
------------------------------------------
范例三:若 str 这个变量存在,则 var 等于 str ,否则输出 "novar"
[root@linux ~]# unset str; var=${str?novar}
-bash: str: novar <==因为 str 不存在,所以输出错误讯息
[root@linux ~]# str="oldvar"; var=${str?novar}
[root@linux ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar <==因为 str 存在,所以 var 等于 str 的内容
# 上面这三个案例都没有提到当 str 有设定,且为空字符串的情况喔!
# 您可以自行测试一下哩!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27042095/viewspace-758788/ ,如需转载,请注明出处,否则将追究法律责任。