Arrays Bash Makefile concat数组

Arrays Bash Makefile concat数组,arrays,bash,makefile,concatenation,Arrays,Bash,Makefile,Concatenation,我试图为文件名数组全局化一个路径,然后对它们做一些处理并填充到一个字符串(格式正确)。下面是代码/概念 13 javascripts: setup 14 i=0 15 for source in `ls ${SOURCE_DIR}/js/*.coffee | sed -e "s:^.*\/\(\w*\).coffee:\1:"`; do\ 16 sources[i]="--input ${OUTPUT_DIR}/js/$$source.js";\ 17 i=$(i+1);\ 18

我试图为文件名数组全局化一个路径,然后对它们做一些处理并填充到一个字符串(格式正确)。下面是代码/概念

13 javascripts: setup
14  i=0
15  for source in `ls ${SOURCE_DIR}/js/*.coffee | sed -e "s:^.*\/\(\w*\).coffee:\1:"`; do\
16    sources[i]="--input ${OUTPUT_DIR}/js/$$source.js";\
17    i=$(i+1);\
18    echo "Compiling coffee script: $$source.coffee";\
19    coffee -bo "${OUTPUT_DIR}/js" -c "${SOURCE_DIR}/js/$$source.coffee";\
20  done;\
21  python2 ${CLOSURE_PATH}/bin/calcdeps.py --path ${CLOSURE_PATH}/../\
22    $${sources[0]} --compiler_jar ${CLOSURE_PATH}/bin/compiler.jar\
23    --output_mode compiled > ${OUTPUT_DIR}/compiled.js;
24  echo "Cleaning ${OUTPUT_DIR}/js"
25  @rm -rf ${OUTPUT_DIR}/js
因此,我想将一个数组连接到一个字符串,并将其导出到第21行以python2开头的命令中。问题是我甚至无法访问
sources
变量中的任何值。当我用
echo$${sources[0]}
替换行
21
时,它输出
--input-output/js/main.js
,这是正确的输入

怎么办?另外,如果您能指出
gnu.org
(long=耗时)上没有的任何bash/Makefile指南,我将不胜感激。我有使用几种语言编程的经验,但很少使用bash,所以在这一点上,它让我发笑

谢谢。

试试
[@]

a=(1 2 3 4 5)
echo "${a[1]}" # == 2
echo "${a[@]}" # == 1 2 3 4 5
另见:

怎么办

插入

    set -x;\
在第15行之前显示已执行的命令。您将发现的一个错误(不影响
${source[0]}
)是

      i=$(i+1);\
不像你希望的那样工作;宁可写

      i=$$((i+1));\
-将美元符号加倍,因为它位于makefile中,并将括号加倍以获得算术展开;甚至更简单

      ((i=i+1));\

获取算术计算。

如果您试图运行python代码,为什么不用python编写整个代码?如果我正确地理解了您要完成的任务,我认为make文件不会以这种方式工作。(我很高兴?被证明是错的;-)。你知道吗?”一个基本上与GNU兼容的python实现
make
”,可能会有所帮助。另外,不清楚的是,您是想单独使用bash(看起来像您拥有的),还是make文件中的bash代码?祝你好运。这只是将数组连接到字符串,但我在变量作用域方面有问题,谢谢你的建议,但我不懂python:(如果这是一个bash脚本,那么它与Make有什么关系?我认为double
$
符号是特定于带有Makefile的运行时变量的,但是因为我不确定,所以我在这里发布它。如果我在shell上执行它,它工作得很好,但是在Makefile中它没有这样做:
sources=$(ls${SOURCE\u DIR}/js/*.coffee | sed-e“s:^.*.*/\(\w*\).coffee:\1:“;echo${sources[@]};echo$${sources[@]};echo$${sources[@]}
以上cmd生成:
echo-echo-echo${sources[@]}
,每个echo之间有一个空行