Как зациклить строки и удалить массив строк - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующий код внутри 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]

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете просто использовать команду 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)))
...