您的位置:首页 > 运维架构 > Shell

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

2013-05-17 23:24 411 查看
一个变量的内容可能经常被替换的,比如说我安装了某软件,但是软件的可执行文件没有被更新到环境变量中去,因此不得不每次进入安装文件的bin目录下去执行相应的可执行程序来启动程序,这是很麻烦的一件事情。你可以将这个bin目录追加到PATH环境变量中,以此便能一劳永逸,无论在任何路径下都能启动该应用程序了。但是对于刚刚开始正式使用Ubuntu的菜鸟来说,一切没有那么顺利的,你会犯错,甚至把PATH环境变量搞错,这真是要命的错误,如何处理好变量内容就成了个中关键。

一步到位的方法是这样:进入你可执行程序的文件夹,然后执行一下命令

PATH=$PATH:$(pwd)   或者是   PATH=$PATH:`pwd`/*注意,这里的`不是单引号,而是键盘左上角,1旁边的那个符号*/

好了,这样肯定是万无一失了。但是对于菜鸟来说,你很可能写成这个样子:

PATH=$PATH:${pwd}   /*即,你小括号变成了大括号,而$()才是先行指令的模式,这个错误的指令会把*/
或者是写成这个样子

PATH=$PATH:'pwd'

这两种处理方式的输出分别是:

/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
此时,你就要使用变量内容的删除与替换的规则进行修正了,规则如以下表格所示:
变量设置方式说明
${ 变量#关键字}若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除
${变量##关键字}若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除
${变量%关键字}若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除
${变量%%关键字}若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除
${变量/旧字符串/新字符串}若变量内容符合“旧字符串”,则将第一个字符串用新字符串代替
${变量//旧字符串/新字符串}若变量内容符合“旧字符串”,则全部用新字符串去代替旧字符串
所以说如果要将以上错误的变量恢复原型,应该做的操作如下:

对于

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
施加操作:
PATH=${PATH%:}
对于

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:pwd
施加操作:

PATH=${PATH%:pwd}
好了,以上就是一个简单的对变量处理的过程了,最后有个小点要注意,对于诸如这个操作:

echo PATH=${PATH#/*lightdm:}
虽然终端显示的结果确实是将PATH变量中的第一个路径给去掉了,但是,PATH变量的值并没有改变,你再echo $PATH试试,其实PATH还是原值。如果想要使得相应的操作对变量生效,必须要进行一个赋值的过程。即让

PATH=${PATH#lightdm:}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Ubuntu bash