我们可以将选项传递给 tcl 8.5 中的 tcl source 命令吗

can we pass options to tcl source command in tcl 8.5

我正在使用此命令获取 get.tcl 文件并提供选项 'verbose' 和 'instant':

source -verbose -instant get.tcl

以上命令在 tcl 8.4 中对我有效,但在 tcl 8.5 中显示此错误

source (script wrong # args: should be "source_orig ?-encoding name? fileName"

如果我只写

source get.tcl

它在 tcl 8.5 中获得通过

tcl 8.5 中是否有与此相关的更改?

source命令只接受一个选项(自8.5起),-encoding,用于指定正在读取的文件是什么编码(而不是返回的默认猜测编码通过 encoding system)。它所做的只是将文件读入内存和(内部等效于)eval 内容。

您可以在执行 source 之前写入任何您想要的变量,包括像 argv 这样的全局变量。有了它(加上根据需要适当使用 uplevelcatch,也许还有 interp create),您可以模拟 运行 脚本作为子进程。但是,不让文件期望处理这样的参数可能更容易,而是让它定义一个您在采购后立即调用的命令。

您可以通过执行以下操作将参数传递给源文件:

set ::argv [list -verbose -instant]
source get.tcl

我推荐使用:

set ::argv [list -- -verbose -instant]

-- 将阻止 tclsh 处理 -- 之后的任何参数。
有时 tclsh 会识别出一个适合您的参数 对其进行编程和处理。您的程序将需要了解 -- 并妥善处理。