小编cxw*_*cxw的帖子

从Bash中的$ PATH变量中删除路径的最优雅方法是什么?

或者更一般地说,如何从Bash环境变量中以冒号分隔的列表中删除项?

我想我多年前已经看到了一种简单的方法,使用更高级的Bash变量扩展形式,但如果是这样的话,我已经忘记了它.对谷歌的快速搜索出乎意料地少了几个相关结果,没有一个我称之为"简单"或"优雅".例如,分别使用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)
Run Code Online (Sandbox Code Playgroud)

什么都不直接存在?有什么类似于Bash中的split()函数吗?

更新:
看起来我需要为我的故意模糊的问题道歉; 我对解决特定用例的兴趣不如激发良好的讨论.幸运的是,我明白了!

这里有一些非常聪明的技巧.最后,我在工具箱中添加了以下三个功能.魔法发生在path_remove中,这主要基于Martin York巧妙使用awk的RS变量.

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=: '$0 != "'$1'"' | sed 's/:$//'`; }
Run Code Online (Sandbox Code Playgroud)

唯一真正的缺点是使用sed去除尾部结肠.考虑到马丁的其他解决方案是多么简单,但我非常愿意接受它!


相关问题: 如何在shell脚本中操作$ PATH元素?

bash shell path variable-expansion list-processing

106
推荐指数
10
解决办法
6万
查看次数

在python中+ =做到了什么?

我需要知道python中的+ =做了什么.就这么简单.我也很感激链接到python中其他简写工具的定义.

python operators notation shorthand compound-assignment

103
推荐指数
9
解决办法
50万
查看次数

如何在Makefile中将$ dir添加到$ PATH?

我想编写一个运行测试的Makefile.测试位于"./tests"目录中,要测试的可执行文件位于"./bin"目录中.

当我运行测试时,他们没有看到exec文件,因为目录./bin不在$ PATH中.

当我做这样的事情时:

EXPORT PATH=bin:$PATH
make test
Run Code Online (Sandbox Code Playgroud)

一切正常.但是我需要更改Makefile中的$ PATH.

简单的Makefile内容:

test all:
    PATH=bin:${PATH}
    @echo $(PATH)
    x
Run Code Online (Sandbox Code Playgroud)

它正确打印路径,但是找不到文件x.

当我手动执行此操作时:

$ export PATH=bin:$PATH
$ x
Run Code Online (Sandbox Code Playgroud)

一切都好.

我怎么能改变Makefile中的$ PATH?

linux makefile

74
推荐指数
3
解决办法
8万
查看次数

XPath - 选择其他元素之后的第一个元素

我是XPath的新手,现在已经花了几个小时摆弄它,所以我不能完全确定你是否能用它来做类似下面的事情.

好的,这是场景:我想从页面中找到一个链接.该链接只能通过它的文本值识别,即.<a>标签之间的文字(<a href="#">此链接<a>).到目前为止,我已经成功地将元素与该文本链接起来,唯一的问题是有一些人在说谎.

这些链接是从无序列表中找到的,这些列表前面是另一个链接标记,它可以作为一个非常好的"锚点"来开始搜索我想要找到的最终元素(即,然后我可以接受第一个匹配)

为了澄清一些事情,这是一个正在发生的事情的例子:

<a href="#">first dropdown menu</a>
<ul>
  <li><a href="#">some link</a></li>
  <li><a href="#">link i want to find</a></li>
</ul>

<-- *And i would actually want to find the thing from this list* --> 
<a href="#">second dropdown menu</a>
<ul>
  <li><a href="#">some link</a></li>
  <li><a href="#">link i want to find</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我应该指出,我只想接收一个结果或一组结果,第一个元素是"正确"元素 - 我想要找到的元素.

编辑: 这个问题已经得到了解答,但有一些评论我应该多说一点,以便人们可以真正理解这个问题;)

因此,我们的想法是使用一个元素来指定另一个元素的位置,该元素可能会在文档周围散布重复的搜索结果.

基本上,如果您想从一组具有相同名称或值的元素的下拉菜单中找到给定的链接,您会遇到类似这样的事情.

基本上就是这样.我知道这一点仍然有点困难,但遗憾的是我很难解释它.我相信其他人可以做得更好,如果发生这种情况,我很乐意在这里加入这个描述.

xpath

44
推荐指数
2
解决办法
6万
查看次数

VBA Excel按特定列排序

我有一个表可以包含任意数量的行:

在此输入图像描述

正如我所说,它可以包含1或∞行.

我想通过B列中的Date单元格对范围A3:D∞进行排序.我该怎么做?

问题是我不知道如何从A3到最后一行进行选择.

我认为循环到最后一行不是一个正确的方法.

到目前为止,我已经得到了这样的分类看起来是正确的,但范围是硬编码的.如何摆脱范围的硬编码?

Range("A3:D8").Sort key1:=Range("B3:B8"), _
order1:=xlAscending, Header:=xlNo
Run Code Online (Sandbox Code Playgroud)

sorting excel vba excel-vba

35
推荐指数
2
解决办法
32万
查看次数

msys路径转换(或msys的cygpath?)

我需要将/DEF:c:\filepath\myLib.def"命令行选项从bash脚本传递给MS编译器/链接器.该路径是作为构建过程的一部分由bash脚本生成的.基本上,我的脚本的参数通行证是:

-DEF:/c/filepath/myLib.def
Run Code Online (Sandbox Code Playgroud)

MSYS路径转换无法正确处理它,因为它不了解/DEF:部分.如果我这样做的话

-DEF=/c/filepath/myLib.def
Run Code Online (Sandbox Code Playgroud)

但是ms工具不理解这个参数.简而言之,在MSYS bash中编写该参数的正确方法是什么,以便将其转换为正确的参数?

在cygwin上我可以使用cygpath,但没有相应的,因为msys的某些人认为它不需要(即使cygwin的脚本使用cygpath).

portability path msys mingw32 cygpath

32
推荐指数
4
解决办法
2万
查看次数

Python属性描述符设计:为什么要复制而不是变异?

我在看内部Python如何实现属性描述符.根据property()描述符协议实现文档,为方便起见,在此处复制它:

class Property(object):
    "Emulate PyProperty_Type() in Objects/descrobject.c"

    def __init__(self, fget=None, fset=None, fdel=None, doc=None):
        self.fget = fget
        self.fset = fset
        self.fdel = fdel
        if doc is None and fget is not None:
            doc = fget.__doc__
        self.__doc__ = doc

    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        if self.fget is None:
            raise AttributeError("unreadable attribute")
        return self.fget(obj)

    def __set__(self, obj, value):
        if self.fset is None:
            raise AttributeError("can't set attribute")
        self.fset(obj, value)

    def __delete__(self, obj):
        if self.fdel is …
Run Code Online (Sandbox Code Playgroud)

python inheritance properties mutators

28
推荐指数
3
解决办法
720
查看次数

Perl打破了If语句

刚出现这个问题:我如何突破if声明?我有一个很长的if语句,但有一种情况我可以在早期就突破它.

在循环中,我可以这样做:

while (something ) {
    last if $some_condition;
    blah, blah, blah
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用if语句执行相同的操作吗?

if ( some_condition ) {
    blah, blah, blah
    last if $some_other_condition; # No need to continue...
    blah, blah, blah
    ...
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以将if语句放在一个块中,然后我可以突破块:

{
    if ( some_condition ) {
        ...
        last if $some_other_condition; # No need to continue...
        blah, blah, blah
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以创建一个子程序(可能以编程方式更好):

if ( some_condition ) {
    run_subroutine();
}

sub run_subroutine {
    blah, blah, blah
    return if $some_other_condition;
    blah, …
Run Code Online (Sandbox Code Playgroud)

perl if-statement break flow-control

27
推荐指数
1
解决办法
4万
查看次数

通过图层/ div转发鼠标事件

有没有人知道jQuery或本地JavaScript方式通过图层启用鼠标事件?例如,启用a下面的链接div.

在我的情况下不能使用的其他解决方案:

javascript jquery javascript-events

23
推荐指数
3
解决办法
3万
查看次数

C++模板功能专用:"非法使用显式模板参数"

以下模板专业化代码:

template<typename T1, typename T2>
void spec1()
{

}
Run Code Online (Sandbox Code Playgroud)

测试案例1:

template< typename T1> //compile error
void spec1<int>()
{

}
Run Code Online (Sandbox Code Playgroud)

测试案例2:

template< typename T2> //compile error
void spec1<int>()
{

}
Run Code Online (Sandbox Code Playgroud)

生成以下编译错误:

错误C2768:'spec1':非法使用显式模板参数

有谁知道为什么?

c++ templates typename template-specialization

20
推荐指数
1
解决办法
3万
查看次数