我正在尝试更改循环内的变量但是我失败了一些错误。这是我的makefile的一部分。
export CLOCK_PERIOD = 30;
syn_clock:
for number in 1 2 3 4 ; do \
echo $$CLOCK_PERIOD; \
echo $$number; \
$$CLOCK_PERIOD = $$number; \
done
make syn_clock
的结果失败了以下几行:
bash-4.2$ make syn_clock
for number in 1 2 3 4 ; do \
echo $CLOCK_PERIOD; \
echo $number; \
$CLOCK_PERIOD = $number; \
done
30
1
/bin/sh: line 3: 30: command not found
30
2
/bin/sh: line 3: 30: command not found
30
3
/bin/sh: line 3: 30: command not found
30
4
/bin/sh: line 3: 30: command not found
make: *** [syn_clock] Error 127
我希望CLOCK_PERIOD
在循环周期中从1变为4。
我做错了什么?
答案 0 :(得分:0)
正如在this comment中已经建议的那样,在分配给Bash shell中的变量时,删除赋值运算符周围的空格和要分配的变量名称中的尾随$
。也就是说,CLOCK_PERIOD=$$number
代替$$CLOCK_PERIOD = $$number
。
由于Makefile中的export CLOCK_PERIOD = 30;
将由make
而不是shell运行,因此结果可能与您预期的不同(CLOCK_PERIOD
的值为30;
而不是30
)。因此,我还删除了this comment中建议的尾随分号。
建议的解决方案是:
export CLOCK_PERIOD = 30
syn_clock:
for number in 1 2 3 4 ; do \
echo $$CLOCK_PERIOD; \
echo $$number; \
CLOCK_PERIOD=$$number; \
done
$
的双$
中的第一个$$number
实际上与Makefile相关:它用于转义Makefile中的第二个$
,以便shell收到$
,否则,如果只写$number
,make
会将其解释为${n}umber
,即:make
会扩展变量的值{ {1}}此结果将与n
连接。那就是shell会收到的。