在我们进行后端设计的时候经常会遇到工具的命令需要传递参数的情况,这个时候,我们就需要在tcl中用到eval指令;
eval的语法是:
eval arg?arg...?

上图是在tclsh中man出来的解释,大意就是说args被读取并连接到单个命令中,然后这个命令通过shell读取并执行,并且它的退出状态作为eval的参数被返回,如果没有args,eval返回0;
看完这上面这个man的解释也不知道这个干嘛用的,咱们回归到实践应用上来;
通常我们执行tcl命令的时候,tcl解释器都会根据我们指定的命令来解析命令和参数,然后Tcl解释器就会调用该命令的过程,把命令中的全部单词传递给该过程,命令过程会根据自己的需要来分辨这些参数的意义;
在这个过程中如果我们通过多个$变量替换来给一个命令的选项来传递参数的时候,可能会出现解析器将变量列表传递进来,而不是将分开的各个变量名传递进过程的现象。
这个时候就会出现命令出现错误使用的现象,eval将命令的参数串接起来,形成新的命令,将命令重新传递给解释器处理,命令字符串会得到解析,各个变量名作为独立的参数传递给过程;
例如;我们在用脚本控制ICC2实现create_placement 工作的时候,我们在不同的flow阶段需要用到不同的command的选项,这个时候,我们通常是用脚本来控制选项的增减;这时我们会
set CMD_OPTIONS "-floorplan $HOST_OPTIONS"
if {xxxxxx} {
set CMD_OPTIONS "$CMD_OPTIONS -timing_driven -congestion"
}
eval create_placement $CMD_OPTIONS
在我们进行后端设计的时候,会有很多这种变量替换很多的现象,这时我们大多数需要在这里用到eval;




