这是一个简化的Makefile:
all:
@for (( i = 0; i < 5; ++i )); do \
var="$$var $$i"; \
echo $$var; \
done
@echo $$var
Run Code Online (Sandbox Code Playgroud)
我想"var"的值是"0 1 2 3 4",但输出是:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
<--- NOTHING!!!
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,最后一个回声是"没什么".怎么了?
Eld*_*mov 11
从这里:
当需要执行配方来更新目标时,通过为配方的每一行调用一个新的子shell来执行它们...
请注意:这意味着设置shell变量和调用shell命令(例如为
cd每个进程设置本地上下文)不会影响配方中的以下行.如果要用于cd影响下一个语句,请将两个语句放在一个配方行中.然后make将调用一个shell来运行整行,shell将按顺序执行语句.
请尝试以下方法:
all:
@for (( i = 0; i < 5; ++i )); do \
var="$$var $$i"; \
echo $$var; \
done; \
echo $$var
Run Code Online (Sandbox Code Playgroud)