有没有办法从命令行传递一个proc参数?我的脚本中有我的过程。我想从命令行给出它的参数。在shell脚本中是否有像“$ @”这样的等价命令?TCL中的proc参数
1
A
回答
4
您可以使用这些预定义的变量获取命令行参数。
$argc - number items of arguments passed to a script.
$argv - list of the arguments.
$argv0 - name of the script.
0
也有args
可变数量的参数。
proc foo args {
foreach arg $args {
puts "arg=$arg"
}
}
所以调用foo将打印:
% foo 1
arg=1
% foo 1 2 3
arg=1
arg=2
arg=3
%
请注意,调用该进程内以$ ARGV会治疗的$ ARGV在$ ARGC列表中的单个元素全部内容:
$ cat ar.tcl
#!/usr/bin/tclsh
proc foo args {
foreach arg $args {
puts "arg=$arg"
}
}
foo $argv
$
$ ./ar.tcl 1 2 3
arg=1 2 3
您将需要使用[lindex $args 0]
才能得到真实的
4
命令行参数有很多部分:
- - Tcl“有用”参数词列表。排除脚本的名称。
$argc
- “有用”参数词的数量(即,长度为);因为[llength $argv]
的作用也很好,所以很少使用。$argv0
- 正在执行的主脚本的名称。[info nameofexecutable]
- 执行脚本的程序。通常称为tclsh
或wish
(或与版本号和扩展名有所不同),但绝对不一定如此。
通过了所有“有用”的说法的话,最简单的方式 - 所有你通常所认为的是参数的话 - 的过程是这样做(假设Tcl的8.5或更高版本):
theProc {*}$argv
请注意,这个必须在之后所有调用proc
完成; proc
是定义过程的命令,而不是过程的声明。 (这个区别?声明可以被看作是文件的更深层次,但Tcl并不是这样工作的。)
我经常喜欢在生产代码中包装一些异常处理,以便任何错误都可以很好地报道,而不是倾销堆栈跟踪:
if {[catch {theProc {*}$argv} msg]} {
handleError $msg
}
此前8.5,你需要一个更丑陋的方式:
eval theProc $argv
这仍然是安全的(正式意义上的),因为Tcl如何保证构造列表值,以及我们知道是一个适当的列表。
相关问题
- 1. 使用proc在Tcl中复制参数
- 2. 如何设置默认值的参数proc是Tcl的
- 3. Tcl的数组GET不PROC与::工作
- 4. Eggdrop - TCL错误[错误#参数:应该是“proc name args body”]
- 5. proc声明中的Tcl全局变量
- 6. 如何用verilog运行tcl proc函数?
- 7. 如何将带有更多参数的字典传递给tcl中的proc?
- 8. 在tcl线程中调用proc
- 9. 在tcl脚本中编写proc avg ns2_new
- 10. 如何从TCL中的proc传递数据集
- 11. TCL proc返回值的约定
- 12. 引用Tcl参数
- 13. 带参数的方法proc
- 14. 的Tcl参数表澄清
- 15. 使用TCL中proc中的脚本中指定的变量
- 16. 如何打印出一个tcl proc?
- 17. tcl proc使用upvar导致历史(nextid)
- 18. TCL:运行PROC从同一个文件
- 19. 使用tcl proc登录到设备
- 20. Python将超过一个参数传递给tcl proc使用Tkinter tcl.eval
- 21. 在NS2中的tcl脚本中写入proc avg
- 22. 参数在proc功能TYPO3
- 23. 问题从C#PROC参数
- 24. ROL in x86 ASM PROC参数
- 25. 在简单的tcl proc中使用catch的问题
- 26. Tcl upvar在另一个proc中的变量
- 27. 有没有办法处理Tcl中不存在的proc?
- 28. 将一个proc复制到TCL中的命名空间
- 29. 无法在TCL中调用proc无效的命令名称
- 30. 如何将列表传递给TCL中的proc?