Конкатный массив Bash Makefile - PullRequest
       15

Конкатный массив Bash Makefile

1 голос
/ 17 февраля 2012

Я пытаюсь найти путь к массиву имен файлов, затем что-то с ними сделать и заполнить строку (правильно отформатирован). Вот код / ​​концепция

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

Итак, я хочу присоединить массив к строке и экспортировать его в команду, начинающуюся с python2 в строке 21. Проблема в том, что я даже не могу получить доступ к какому-либо значению в переменной sources. Когда я заменяю строку 21 на echo $${sources[0]}, она выводит --input output/js/main.js, который является правильным входом.

Что делать? Кроме того, если бы вы могли указать на любые руководства по bash / Makefile, которые не включены в gnu.org (долго = много времени), я был бы признателен. У меня есть опыт программирования с несколькими языками, но очень мало с bash, поэтому на данный момент это заставляет меня смеяться.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 марта 2014

Что делать?

Вставить

    set -x;\

перед строкой 15 для отображения выполненных команд. Вы заметите одну ошибку (которая не влияет на ${source[0]}):

      i=$(i+1);\

не работает так, как вы этого хотите; лучше напиши

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

- удвоить знак доллара, потому что он находится в make-файле, и удвоить скобки для получения арифметического расширения; или даже проще

      ((i=i+1));\

чтобы получить арифметическую оценку.

0 голосов
/ 18 февраля 2012

Попробуйте [@]:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...