30
从Bash中的$ PATH变量中删除路径的最优雅方法是什么?
或更笼统地说,如何从Bash环境变量中以冒号分隔的列表中删除项目? 我以为几年前我已经看过一种简单的方法,可以使用更高级的Bash变量扩展形式,但是如果这样的话,我就会迷失方向。快速搜索Google却发现几乎没有相关结果,而我也称其为“简单”或“优雅”。例如,分别使用sed和awk的两种方法: PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;') PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH) 没有简单的东西存在吗?有什么类似于Bash中的split()函数吗? 更新: 对于我故意含糊的问题,我似乎需要道歉;我对解决特定用例的兴趣不及引起良好讨论的兴趣。幸运的是,我明白了! 这里有一些非常聪明的技术。最后,我在工具箱中添加了以下三个功能。魔术发生在path_remove中,这主要是基于Martin York对awkRS变量的巧妙使用。 path_append () { path_remove $1; export PATH="$PATH:$1"; } path_prepend () { path_remove $1; export PATH="$1:$PATH"; } path_remove () { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: …