tcl使用笔记
tcl语法网站:http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm
1)拷贝文件
set PRJ_HDL_DIR "../prj/hdl"
foreach filename [glob "../tsbs/smii_mtip/rtl/include/{*.verilog,*.v}"] {
file copy $filename $PRJ_HDL_DIR
}
2)如何获取当前脚本文件的名称?
由于有时需要获得当前运行脚本的名称,可以参考 如下
http://blog.csdn.net/gllg1314/article/details/7695746
http://wiki.tcl.tk/1384
http://stackoverflow.com/questions/23285360/how-to-get-path-of-current-script
While a script is being evaluated (but not necessarily while its procedures are being called) the current script name (strictly, whatever was passed to source or the C API equivalent, Tcl_EvalFile() and related) is the result of info script; it's highly advisable to normalise that to an absolute pathname so that any calls to cd don't change the interpretation.
Scripts that need the information tend to put something like this inside themselves:
# This is a *good* use of [variable]…
variable myLocation [file normalize [info script]]
They can then retrieve the value (or things derived from it) easily:
proc getResourceDirectory {} {
variable myLocation
return [file dirname $myLocation]
依据参考得到的代码:
set print echo
$print "----------------------------------------"
$print " rs - Re-Source startup file "
$print " comp_afu_textswap - Compile memcopy example "
$print " sim - Start vsim"
$print "----------------------------------------"
variable My_File [file normalize [info script]]
# the above line can't be put in the rs{} procedure.
proc rs {} {
variable My_File
set filename [file tail $My_File]
echo "current file is $filename"
source $filename
}
需要指出的是
a.variable My_File [file normalize [info script]] 这句话不能放在rs procedure中,否则得到空字符
b.rs函数中的variable My_File就是全局变量的My_File的值
===========================
1)
#set PRJ_HDL_DIR {$PRJ_ROOT_DIR}/prj/hdl 则[ Line 3: extra characters after close-brace ]
#set PRJ_HDL_DIR "{$PRJ_ROOT_DIR}/prj/hdl" 则{}会被当成字符,当成了 {..}/prj/hdl"
#set PRJ_HDL_DIR ${PRJ_ROOT_DIR}/prj/hdl correct!!!
#set PRJ_HDL_DIR "${PRJ_ROOT_DIR}/prj/hdl" correct!!
2)
{}里面不能有注释?
foreach pathname {1 2 3} ${
# foreach filename [glob "../tsbs/smii_mtip/rtl/include/{*.verilog,*.v}"] {
puts "pathname = $pathname"
# foreach filename [glob "${pathname}{*.verilog,*.v}"] {
# file copy $filename $PRJ_HDL_DIR
# }
}
Error: Failure when executing Tcl script. [ Line 10: can't read "
# foreach filename [glob "../tsbs/smii_mtip/rtl/include/{*.verilog,*.v": no such variable ]
Error: The Execute Script command failed.
3)
pathname = ${PRJ_ROOT_DIR}/tsbs/smii_mtip/rtl/include/
pathname = $PRJ_ROOT_DIR/tsbs/sgmii_mtip/rtl/include/
The Execute Script command succeeded.
{} 中间不能替换,但是foreach需要列表,其实是不需要,如下就能正确工作
set INCLUDE_PATH_ARRAY "${PRJ_ROOT_DIR}/tsbs/smii_mtip/rtl/include/ $PRJ_ROOT_DIR/tsbs/sgmii_mtip/rtl/include/"
foreach pathname $INCLUDE_PATH_ARRAY {
puts "pathname = $pathname"
}
tcl使用笔记的更多相关文章
- TCL语言笔记:TCL中的数组
一.介绍 Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念.数组的存取速度要比列表有优势,数组在内部使用散列表来存储 ...
- TCL语言笔记:TCL中的列表操作
一.介绍 列表则是具有特殊解释的字符串.Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构.列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命 ...
- TCL语言笔记:TCL中的String命令
一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.strin ...
- TCL语言笔记:TCL中的控制结构命令
一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...
- TCL语言笔记:TCL中的数学函数
一.TCL数学函数列表 函数名 说明 举例 abs(arg) 取绝对值 set a –10 ; #a=-10 set a [expr abs($a)]; # a=10 acos(arg) 反余弦 s ...
- TCL语言笔记:TCL基础语法
一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...
- Tcl语言笔记之二
1,表达式 1.1 操作数 TCL表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作 ...
- Tcl语言笔记之一
1,一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开 2,置换 substitution %set y x+100 // ...
- TCL语言笔记:TCL练习二
一.练习 1.二进制转十进制 proc b2d {b} { ;set len [string length $b] } {$i<$len} {incr i} { incr sum [expr , ...
随机推荐
- 简单介绍Javascript匿名函数和面向对象编程
忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...
- http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理,及它的逆向函数
http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理 例如: $data = array( 'foo'=>'bar', ' ...
- 在ubuntu下安装QQ
(参考链接 :http://jingyan.baidu.com/album/47a29f24577776c01423991a.html?picindex=3) 一 .安装 wine 1.下载一个 ...
- 【转载】ansys中压力随时间变化的表格加载方法
原文地址:http://wenku.baidu.com/link?url=w9k94Upqbok0SUNU3L7LOLRDLUtP7W_KyQWK68ajK_nEbO00mO6hzbuBQ01rS07 ...
- mysql的source命令
第一次使用 source导入 sql 文件时,死活提示不成功,偶然发现在输入文件所在路径是,必须用 "/"斜杠,而不能是反斜框 "\".
- 【Unity3D基础教程】给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D重要模块的类图 最近刚刚完成了一 ...
- jquery选择器之表单选择\表单对象属性
:input 匹配所有input标签 :text 匹配所有单行文本框 :password 匹配所有密码框 :radio 匹配所有单选扭 :checkbox 匹配所有复选框 :image 匹配所有图像 ...
- Oracle调整联机日志大小
近期一个项目反馈月底高峰期时系统整体性能下降,抓取对应的AWR和ASH查看,等待事件排第一位的竟然是redo日志切换.进一步看每秒的日志量是5M多,而日志文件大小仅有200M.建议项目上调整日志大小, ...
- 黄聪: Bootstrap之Form表单验证神器: BootstrapValidator(转)
前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...
- 【巩固】CSS3的3D动画 ——3D旋转(1)
最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve ...