2016-07-27 34 views
0

我试图使用shell字符串操作方法从我的PATH变量中删除路径:$ {string%$ substring}。它适用于通用变量,但当我想要删除PATH变量中的路径时它不起作用。从env变量中删除子字符串在shell中不起作用

xiangxue➜~» echo $PATH [10:34:16] 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xiangxue/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin 

假设我想删除:在/ usr /游戏从路径条目,我这样做:

xiangxue➜~» echo ${PATH%:/usr/games} [10:40:12] 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xiangxue/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin 

路径不删:在/ usr /游戏条目,它看起来完全相同。

回答

1

${parameter%pattern}字符串操作从字符串的结尾(见猛砸指南Parameter Expansion或猛砸Reference manualPOSIX Spec),但:/usr/games删除是不是在你字符串的结束,因此不匹配。

你想这样做的扩张是${parameter/pat/string}扩展:

echo "${PATH/:\/usr\/games}" 

或者你想在:和循环分裂$PATH筛选出您需要的项目。

+0

谢谢,您的建议很有效 – XXWang

0

试试这个;

PATH=$(echo $PATH | sed 's/:\/usr\/games:/:/g;s/:\/usr\/games//g;s/\/usr\/games://g') 

[email protected]:/tmp$ PATH=/usr/games:/usr/sbin:/usr/bin:/sbin:/usr/games:/bin:/usr/games 
[email protected]:/tmp$ echo $PATH 
/usr/games:/usr/sbin:/usr/bin:/sbin:/usr/games:/bin:/usr/games 
[email protected]:/tmp$ PATH=$(echo $PATH | sed 's/:\/user\/games:/:/g;s/:\/usr\/games//g;s/\/usr\/games://g') 
[email protected]:/tmp$ echo $PATH 
/usr/sbin:/usr/bin:/sbin:/bin