2016-07-27 1 views
0

Я пытался удалить путь из своей переменной PATH с использованием метода манипуляции с оболочкой: $ {string% $ substring}. Он работает для общей переменной, но не работает, когда я хочу удалить путь в переменной PATH.удалить подстроку из переменной env не работает в оболочке

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/игры запись из PATH, я сделал это:

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} обработка строк снимает с конца строки (см Руководство по Bash Parameter Expansion или Bash Reference manual или POSIX 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 
Смежные вопросы