Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux makefile中初始化并迭代数组?_Linux_Unix_Makefile_Gnu Make - Fatal编程技术网

如何在linux makefile中初始化并迭代数组?

如何在linux makefile中初始化并迭代数组?,linux,unix,makefile,gnu-make,Linux,Unix,Makefile,Gnu Make,我需要创建一个带有目录的数组,然后将其插入,在每一步中创建一个数组,该数组将包含通过“find”命令为每个derictory找到的所有文件,并对该数组进行迭代。我试着这样做: declare -a arr=(a b c) ;\ for key in "$${arr[@]}" ; do \ ... done\ 但它不起作用。 即使这样也会出现错误: all: declare -a array=(a b c) ;\ echo "$${array[1]}"

我需要创建一个带有目录的数组,然后将其插入,在每一步中创建一个数组,该数组将包含通过“find”命令为每个derictory找到的所有文件,并对该数组进行迭代。我试着这样做:

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
获取错误:

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

这是因为make在运行recipes时总是调用
/bin/sh
(POSIX shell),除非您另有说明。您使用的语法特定于
/bin/bash
shell,在
/bin/sh
中不可用

如果您想使用
/bin/bash
运行您的食谱,您必须通过将以下内容添加到您的make文件中来明确告知make:

SHELL := /bin/bash

请参阅以获得另一个答案。

或将您的行放入
bash
脚本中,并从
Makefile
调用该脚本。