我正在尝试为文件名数组添加路径,然后对它们执行某些操作并填充到字符串(格式正确)。这是代码/概念
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很少,所以在这一点上,它让我发笑。
谢谢。
答案 0 :(得分:0)
尝试[@]
:
a=(1 2 3 4 5)
echo "${a[1]}" # == 2
echo "${a[@]}" # == 1 2 3 4 5
答案 1 :(得分:0)
怎么办?
插入
set -x;\
在第15行之前显示执行的命令。您将发现的一个错误(不会影响${source[0]}
)是
i=$(i+1);\
不能像你想要的那样工作;而是写
i=$$((i+1));\
- 将美元符号加倍,因为它在makefile中,并加倍括号以获得算术扩展;甚至更简单
((i=i+1));\
获得算术评估。