我有一个脚本说,myscript.tcl。该脚本将通过一个文件并执行一些基本操作。但我不想用“open myfile.txt”之类的东西对脚本中的文件名进行硬编码。我希望能够在运行时从命令行将不同的文件传递给脚本。我该如何实现这一目标?请帮忙。
答案 0 :(得分:4)
使用tclsh myscript.tcl myfile.txt
并在脚本中调用脚本:
lassign $argv filename
set fid [open $filename]
如果您想传递多个文件名:tclsh myscript.tcl file1 file2 file3
foreach filename $argv {
puts "Operating on: $filename"
set fid [open $filename]
# ...
}
答案 1 :(得分:4)
脚本文件名后tclsh的所有参数都作为列表存储在全局Tcl变量argv
中(并且该列表的长度放在argc
中;您不需要因为Tcl列表知道自己的长度)。这意味着您可以使用常规列表处理命令(例如lindex
,lassign
或foreach
)来访问该列表中的值:
set filename [lindex $argv 0]
puts "The filename is \"$filename\""
set f [open $filename]
set line [read $f]
puts "The first line of \"$filename\" is \"$line\""