变量设定功能(1)

 From:    http://vbird.dic.ksu.edu.tw/linux_basic/fedora_4/0320bash-fc4.php#variable_echo

额外的变量设定功能

刚刚我们提到了两种变量取用的方法,分别是这样:
[root@linux ~]# echo $HOME
[root@linux ~]# echo ${HOME}
那么,在那个 ${variable} 的使用方法中,其实,我们还可以将变量进行一些修订的工作喔! 只要加上一些字符标志,后面再接着使用比对字符串,就能够修改变量的内容了! 我们取底下的例子来说明:在底下的例子中,假设我的变量名称为 vbird ,且内容为 /home/vbird/testing/testing.x.sh。
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
# 如果变量后面接的是 / 时,那么表示后面是进行『取代』的工作~而且仅取代『第一个』
# 但如果是 // ,则表示全部的字符串都取代啊!
这里您稍微留意一下就好了~反正就是变量后面可以接 #, ##, %, %%, /, // , 而他们存在的意义并不相同的啦~

另外,几个不同的变量内容还可以进行判断呢! 举例来说,目前我需要用到两个变量,分别是 var 与 str , 那我想要针对 str 这个变量内容是否有设定成一个字符串,亦即 "expr" 来决定 var 的内容。 那我可以使用什么方法来进行判断呢?如果您会写 shell script. 的话, 直接用 shell script. 就好了,如果不会写,那么我们就透过简单的变量判断吧!
Tips:
底下的例子当中,那个 var 与 str 为变量,我们想要针对 str 是否有设定来决定 var 的值喔! 一般来说, str: 代表『str 没设定或为空的字符串时』;至于 str 则仅为『没有该变数』。
鸟哥的图示
变量设定方式str 没有设定str 为空字符串str 已设定非为空字符串
var=${str-expr}var=exprvar=var=$str
var=${str:-expr}var=exprvar=exprvar=$str
var=${str+expr}var=var=exprvar=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 输出至 stderrvar=var=str
var=${str:?expr}expr 输出至 stderrexpr 输出至 stderrvar=str

根据上面这张表,我们来进行几个范例的练习吧! ^_^


-----------------------------------------------------
范例一

[root@linux ~]# unset str; var=${str-newvar}

 [root@linux ~]# echo var="$var", str="$str"

 var=newvar, str=

 [root@linux ~]# str="oldvar"; var=${str-newvar}

 [root@linux ~]# echo var="$var", str="$str"

 var=oldvar, str=oldvar

 --------------------------------------


范例二:

[root@linux ~]# unset str; var=${str=newvar}

 [root@linux ~]# echo var="$var", str="$str"

 var=newvar, str=newvar

 [root@linux ~]# str="oldvar"; var=${str=newvar}

 [root@linux ~]# echo var="$var", str="$str"

 var=oldvar, str=oldvar

 ------------------------------------------
范例三


 [root@linux ~]# unset str; var=${str?novar}

 -bash: str: novar
[root@linux ~]# str="oldvar"; var=${str?novar}

 [root@linux ~]# echo var="$var", str="$str"

 var=oldvar, str=oldvar

 # 上面这三个案例都 # 您可以自行测试一下哩!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27042095/viewspace-758788/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27042095/viewspace-758788/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值