Bash Makefile concat数组

时间:2012-02-17 18:58:14

标签: 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    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变量中的任何值。当我用21替换行echo $${sources[0]}时,它会输出--input output/js/main.js这是正确的输入。

怎么办?另外,如果您可以指出任何不在gnu.org上的bash / Makefile指南(长=耗时),我会很感激。我有很多语言的编程经验,但是bash很少,所以在这一点上,它让我发笑。

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试[@]

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

另见:http://tldp.org/LDP/abs/html/arrays.html

答案 1 :(得分:0)

  

怎么办?

插入

    set -x;\
在第15行之前

显示执行的命令。您将发现的一个错误(不会影响${source[0]})是

      i=$(i+1);\

不能像你想要的那样工作;而是写

      i=$$((i+1));\

- 将美元符号加倍,因为它在makefile中,并加倍括号以获得算术扩展;甚至更简单

      ((i=i+1));\

获得算术评估。