【问题标题】:How to loop on strings and remove the string array如何循环字符串并删除字符串数组
【发布时间】:2018-09-13 07:24:54
【问题描述】:

我在make 文件中有以下代码,该代码来自命令字符串数组

apps := $(shell fxt run apps)


go:
    @for v in $(apps) ; do \
        echo inside recipe loop with sh command: $$v ; \
    done

该命令返回类似[app1 app2 appN] 的数组(里面可能有很多应用程序) 但我需要它是 app1 app2 appN ,知道如何删除数组 [] 吗?

当我运行 make 我得到以下内容

inside recipe loop with sh command: [app
inside recipe loop with sh command: app2]

【问题讨论】:

    标签: linux unix makefile gnu-make gnu


    【解决方案1】:

    您可以简单地使用带有空替换部分的subst 命令来删除部分变量内容,如下所示:

    apps := $(shell ls)
    
    #add []
    apps := [ $(apps) ]
    $(info Apps: $(apps))
    
    # replace [ with nothing -> remove it
    apps := $(subst [ ,,$(apps))
    
    # replace ] with nothing -> remove it
    apps := $(subst ],,$(apps))
    $(info Apps: $(apps))
    

    或使用filer-out 与:

    apps :=$(filter-out [ ], $(apps))
    

    取而代之的是两个替换函数。重要提示:在括号之间保留一个space,因为filter-out 需要一个单词列表。所以你在命令的模式部分有 2 个单词。 输出:

    Apps: [ a b c Makefile ]
    Apps: a b c Makefile
    

    如果输入的[ 和第一个单词之间没有空格,则必须使用subst 命令。

    也许您喜欢将两个表达式连接在一个中(但可读性较差):

        apps := $(subst ],,$(subst [,,$(apps)))
    

    【讨论】:

    • 谢谢,可以一行吗?而不是两个子集?
    • 恭喜获得 10K :)
    • @JennyM:感谢您的投票;)。我在我的答案中添加了一条线。
    • 非常感谢 :) ,问题是我没有像[ app1 app2 ] 那样我有它像[app1 app2] 一样,没有这样使用它的选项吗?当前过滤器不工作...
    • @JennyM:那么你必须使用两行的subst 命令。我认为没有机会在一行中得到这个。好的,您可以将两者连接:apps := $(subst ],,$(subst [,,$(apps)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2013-10-17
    • 2022-11-12
    相关资源
    最近更新 更多