非常有趣!不是吗?因为在
PATH
这个变量的内容中,每个目录都是以冒号『
:
』隔开的,
所以要
从头删除掉目录就是½于斜线
(/)
到冒号
(:)
之间的数据!但是
PATH
中不止一个冒号
(:)
啊!
所
以
#
与
##
就分别代表:
.
#
:符合取代文字的『最短的』那一个;
.
##
:符合取代文字的『最长的』那一个
上面谈到的是『从前面开始删除变量内容』,那么如果想要『从后面向前删除变量内容』呢?
这个
时候就得使用百分比
(%)
符号了!来看看范例四怎么做吧!
范例四:我想要
删
除最后面那
个
目
录
,亦即
从
:
到
bin
为
止的字符串
[dmtsai@study ~]$
echo ${path%:*bin}
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin
#
注意啊!最后面一
个
目
录
不
见
去!
#
这个
%
符
号
代表由最后面
开
始向前
删
除!所以上面得到的
½
果其
实
是
来
自如下:
# /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin
:/home/dmtsai/bin
范例五:那如果我只想要保留第一
个
目
录
呢?
[dmtsai@study ~]$
echo ${path%%:*bin}
/usr/local/bin
#
同
样
的,
%%
代表的
则
是最
长
的符合字符串,所以
½
果其
实
是
来
自如下:
# /usr/local/bin
:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
由于我是想要由变量内容的后面向前面删除,而我这个变量内容最后面的½尾是『
/home/dmtsai/bin
』,
所以你可以看到上面我删除的数据最终一定是『
bin
』,亦即是『
:*bin
』那个
*
代表通配符!
至于
%
与
%%
的意义其实与
#
及
##
类似!这样理½否?
例题:
假设你是
dmtsai
,那你的
MAIL
变量应该是
/var/spool/mail/dmtsai
。假设你只想要保留最后面那个档名
(dmtsai)
,
前面的目录名称都不要了,如何利用
$MAIL
变量来达成?
答:
题意其实是这样『
/var/spool/mail/
dmtsai
』,亦即删除掉两条斜线间的所有数据
(
最长符合
)
。
这个时候你就可
以这样做即可:
[dmtsai@study ~]$
echo ${MAIL##/*/}
相反的,如果你只想要拿掉文件名,保留目录的名称,亦即是『
/var/spool/mail
/dmtsai
』
(
最短符合
)
。但假设
你并不知道½尾的字母为何,此时你可以利用通配符来处理即可,如下所示:
[dmtsai@study ~]$
echo ${MAIL%/*}
了½了删除功能后,½下来谈谈取代吧!继续玩玩范例六啰!
范例六:
½
path
的
变
量
内
容
内
的
sbin
取代成大
写
SBIN
:
[dmtsai@study ~]$
echo ${path/sbin/SBIN}