Ubuntu命令学习:bash中变量内容的删除、替代与替换


Ubuntu命令学习:bash中变量内容的删除、替代与替换
 
一个变量的内容可能经常被替换的,比如说我安装了某软件,但是软件的可执行文件没有被更新到环境变量中去,因此不得不每次进入安装文件的bin目录下去执行相应的可执行程序来启动程序,这是很麻烦的一件事情。你可以将这个bin目录追加到PATH环境变量中,以此便能一劳永逸,无论在任何路径下都能启动该应用程序了。但是对于刚刚开始正式使用Ubuntu的菜鸟来说,一切没有那么顺利的,你会犯错,甚至把PATH环境变量搞错,这真是要命的错误,如何处理好变量内容就成了个中关键。
 
一步到位的方法是这样:进入你可执行程序的文件夹,然后执行一下命令
 
[cpp] 
PATH=$PATH:$(pwd)   或者是   PATH=$PATH:`pwd`/*注意,这里的`不是单引号,而是键盘左上角,1旁边的那个符号*/  
好了,这样肯定是万无一失了。但是对于菜鸟来说,你很可能写成这个样子:
 
[cpp] 
PATH=$PATH:${pwd}   /*即,你小括号变成了大括号,而$()才是先行指令的模式,这个错误的指令会把*/   
或者是写成这个样子
[cpp] 
PATH=$PATH:'pwd'  
这两种处理方式的输出分别是:
 
[cpp] 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:  
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:pwd  
此时,你就要使用变量内容的删除与替换的规则进行修正了,规则如以下表格所示:
变量设置方式 说明
${ 变量#关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除
${变量##关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除
${变量%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除
${变量%%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合“旧字符串”,则将第一个字符串用新字符串代替
${变量//旧字符串/新字符串} 若变量内容符合“旧字符串”,则全部用新字符串去代替旧字符串
所以说如果要将以上错误的变量恢复原型,应该做的操作如下:
 
对于
 
[cpp] 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:  
施加操作:
[cpp] 
PATH=${PATH%:}  
对于
[cpp] 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:pwd  
施加操作:
[cpp] 
PATH=${PATH%:pwd}  
好了,以上就是一个简单的对变量处理的过程了,最后有个小点要注意,对于诸如这个操作:
[cpp] 
echo PATH=${PATH#/*lightdm:}  
虽然终端显示的结果确实是将PATH变量中的第一个路径给去掉了,但是,PATH变量的值并没有改变,你再echo $PATH试试,其实PATH还是原值。如果想要使得相应的操作对变量生效,必须要进行一个赋值的过程。即让
[cpp] 
PATH=${PATH#lightdm:}  
 

相关内容

    暂无相关文章