我正在尝试执行以下代码进行2次迭代,但是对于第一次迭代,我得到的结果是错误的。
我运行以下命令: ./test.sh 2
# File name: test.sh
Y=`echo "$1 - 1" | bc -l`
dsp=(0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 )
file1=(0 0 0 0 0 -3 -3 -3 -3 -3 -6 -6 -6 -6 -6 )
for i in {0..$Y}
do
a=$dsp[$i]
e=$file1[$i]
echo "set_property LOC DSP48E2_X0Y$(echo "18*${i}+ 0 + $a" | bc) [get_cells {name[$(echo "13*${i}+0 + $e" | bc)].dut}];"
done
预期结果:
set_property LOC DSP48E2_X0Y0 [get_cells {name[0].dut}]
set_property LOC DSP48E2_X0Y18 [get_cells {name[13].dut}]
但是我收到一个错误:
(standard_in) 2: syntax error
(standard_in) 2: syntax error
set_property LOC DSP48E2_X0Y [get_cells {name[].dut}];
set_property LOC DSP48E2_X0Y18 [get_cells {name[13].dut}];
答案 0 :(得分:1)
变量在花括号内不起作用。要循环显示一系列数字,请使用C样式的for
循环:
for ((i = 0; i < Y; i++)); do
...
done
您也不必使用bc
。 Bash可以使用$((...))
进行整数运算。
Y=$(($1 - 1))
...
echo "set_property LOC DSP48E2_X0Y$((18*i+a)) [get_cells {name[$((13*i+e))].dut}];"
此外,访问数组元素需要花括号:
a=${dsp[$i]}
e=${file1[$i]}