一个变量的内容可能经常被替换的,比如说我安装了某软件,但是软件的可执行文件没有被更新到环境变量中去,因此不得不每次进入安装文件的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:}