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之间有一个空行