我正在尝试将一些tcl脚本转换为C ++程序。我对tcl没有多少经验,希望有人能解释一下tcl脚本中实际做了些什么:
1) set rtn [true_test_sfm $run_dir]
2) cd [glob $run_dir]
3) set pwd [pwd]
第一个只是检查run_dir中是否存在true_test_sfm目录?
另外,我正在使用Windows机器进行编程。系统函数是否等同于tcl中的exec语句?如果是这样,我如何将系统函数调用的结果打印到stdout?
答案 0 :(得分:4)
在Tcl中,方括号表示“评估方括号之间的代码”。该评估的结果代替了整个方括号表达式。因此,第一行使用单个参数true_test_sfm
调用函数$run_dir
;然后将该函数调用的结果分配给变量rtn
。不幸的是,true_test_sfm
不是内置的Tcl函数,这意味着它是用户定义的,这意味着我们无法告诉您该函数调用的效果将基于您在此处提供的信息
glob
是一个内置的Tcl函数,它将文件模式作为参数,然后列出与该模式匹配的文件。例如,如果目录包含文件“foo”,“bar”和“baz”,glob b*
将返回两个文件的列表,“bar”和“baz”。因此,第二行是查找与$run_dir
给出的模式匹配的任何文件,然后使用cd
命令(另一个Tcl内置)更改为glob
找到的目录。可能$run_dir
实际上不是文件模式,而是显式文件名(即字符串中没有像*或?这样的通配字符),否则此代码可能会意外中断。在Windows上,C ++中FindFirstFile
/ FindNextFile
的某些组合可用作Tcl中glob
的替代,而SetCurrentDirectory
可替代cd
。< / p>
pwd
是另一个内置的Tcl函数,它将进程当前工作目录作为绝对路径返回。所以最后一行是查询当前工作目录并将结果保存在名为pwd
的变量中。在这里,您可以使用GetCurrentDirectory
代替pwd
。