Как я могу инициализировать, а затем перебрать массив в make-файле Linux? - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно создать массив с каталогами, а затем создать его, создавая еще один массив на каждом шаге, который будет включать все файлы, найденные с помощью команды 'find' для каждого ограничения, а также итерировать этот массив. Я пытался сделать что-то вроде этого:

declare -a arr=(a b c) ;\
for key in "$${arr[@]}" ; do \
    ...
  done\

но это не работает. Даже это получает ошибку:

all:
        declare -a array=(a b c) ;\
        echo "$${array[1]}" \

получает ошибку:

/bin/sh: 1: Syntax error: "(" unexpected
Makefile:4: recipe for target 'gg' failed
make: *** [gg] Error 2

1 Ответ

0 голосов
/ 07 мая 2018

Это потому, что make всегда вызывает /bin/sh (оболочка POSIX), когда запускает рецепты, если вы не укажете это иначе. Синтаксис, который вы используете, специфичен для оболочки /bin/bash и недоступен в /bin/sh.

Если вы хотите запустить свои рецепты, используя /bin/bash, вы должны специально указать make, чтобы сделать это, добавив это в ваш make-файл:

SHELL := /bin/bash

См. Для цикла в make-файле не работает для другого ответа.

...