如何将整个文件作为参数传递给 tcl 脚本?

How can I pass an entire file as an argument to a tcl script?

我有一个脚本说,myscript.tcl。该脚本将遍历一个文件并执行一些基本操作。但我不想用 "open myfile.txt" 之类的东西在脚本中硬编码文件名。我希望能够在 运行 时从命令行将不同的文件传递给脚本。我如何实现这一目标?请帮忙。

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]
    # ...
}

脚本文件名之后的所有 tclsh 参数都作为一个列表存储在全局 Tcl 变量 argv 中(并且该列表的长度放在 argc 中;您不需要需要它,因为 Tcl 列表知道它们自己的长度)。这意味着您可以使用正常的列表处理命令,例如 lindexlassignforeach 来访问该列表中的值:

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\""