Linux 如何循环字符串并删除字符串数组

Linux 如何循环字符串并删除字符串数组,linux,unix,makefile,gnu-make,gnu,Linux,Unix,Makefile,Gnu Make,Gnu,我在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时,我得到了以

我在
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]

您可以使用带有空替换部件的
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))
或者使用
文件管理器输出

apps :=$(filter-out [ ], $(apps))
取而代之的是两个替换功能。重要事项:由于
筛选出
需要一个单词列表,因此在制动器之间保留一个
空格。在命令的模式部分有两个单词。
输出:

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

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


谢谢,它可以是一行吗?而不是两个子集吗?祝贺10K:)@JennyM:谢谢你所需要的投票;)。我在我的答案中加了一行。非常感谢:),问题是我没有像
[app1 app2]
那样的答案
,没有这样使用的选项?当前过滤器不起作用…@JennyM:那么你必须使用两行的
subst
命令。我看不出有可能在一行中得到这个。好的,你可以将这两行连接起来:
apps:=$(subst],$(subst[,$(apps))
Apps: [ a b c Makefile ]
Apps: a b c Makefile
    apps := $(subst ],,$(subst [,,$(apps)))