По крайней мере, здесь это подозрительно: вам нужно запятую после value=i
и done
; плюс fi
для завершения if
. Тогда
str = $*
завершится неудачно, потому что в назначении переменной оболочки не должно быть пробелов. Я предлагаю str="$*";
вместо этого. Обратите внимание, в частности, на точку с запятой, потому что такие элементы, как
FOO=bar echo "$FOO"
НЕ будут отображать строку эха, а
FOO=bar; echo "$FOO"
. Затем value=i
должно быть value=$$i
, а *$value*
должно быть *$$value*
, поскольку make
в противном случае будет думать, что вы ссылаетесь на переменную make , когда вы имели в виду переменную shell .
Кроме этого, ваша сборка выглядит слишком сложной. Время реорганизовать сборку для упрощения c. Сборка, требующая пользовательского ввода, является мерзостью (не может запустить ее из cron, не может запустить ее из-за непрерывной интеграции, нуждается в говорящей обезьяне) Вы должны параметризовать вашу сборку с помощью переменной make, чтобы вы могли сказать
make BUILD=usb # or BUILD=flash or whatever.
Может быть, этот GNUmakefile намного проще:
test_c = echo testing...
$(TGTBUILD)/%f.c: $(CURDIR)/test/%.trm
ifeq (${BUILD},usb)
$(test_c)
else
echo BUILD is not usb
endif