2012-02-17 16 views
1

私はファイル名の配列のためのパスをglobしてから、それらを使って何かを行い、(適切にフォーマットされた)文字列に移入しようとしています。ここでBash Makefile concatの配列

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

あなたがPythonコードを実行しようとしているなら、なぜPythonですべてのことを書いてみませんか? –

+0

コードは私のものではありません – farnoy

+0

私があなたが達成しようとしていることを正しく理解しているなら、私はファイルをそのように動かすつもりはないと思います。 (私は間違っていると証明されるために幸せになるでしょう;-)。 http://benjamin.smedbergs.us/pymake/について知っていますか? '主にGNU互換のPythonの 'make'の実装です。おそらくそれが役に立ちます。また、それは明らかではない、あなたは自分のもののように見えるbash、あるいはmakeファイルの中のbashコードを使いたいのか?がんばろう。 – shellter

答えて

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

+0

シェルで実行すると完全に動作しますが、 Makefile: 'sources = $(ls $ {SOURCE_DIR}/js/* .cote | sed -e" s:^。* \/\(\ w * \)。コーヒー:\ 1: ");エコー$ {源[@]};エコー$$ {源[@]}};エコー$$ {源[@]}' CMD上記 – farnoy

+0

が生成: ' は エコーエコーecho $ {sources [@]} '各エコーの間に空白行がある – farnoy

0

何をしますか?

挿入

set -x;\ 

ライン15の前に実行されたコマンドを表示します。一つのエラー(つまり、${source[0]}には影響しません)あなたは見つけるだろうが、あなたはそれがしたいように見えるよう

 i=$(i+1);\ 

が動作しないということです。むしろ

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

を書く - それはメイクファイルでだ、と二重の括弧は、算術展開を取得するので、ドル記号を倍増。算術的評価を得るためには、より単純で、より単純である。