从内部调用 proc 将 TCL 命令放入文件中

calling a proc from inside puts TCL command and put it in file

我正在尝试从 puts 语句中调用一个 proc,并使用 TCL 将其放入一个文件中,如下所示

set fp_jason [open jason.txt w]
proc MY_FUNCTION { } {
puts "Experiment success"
}
puts $fp_jason " [MY_FUNCTION] "

上述脚本在 jason.txt 中的输出为空

实验成功打印在 shell

我希望 jason.txt 包含的所需输出是

$cat jason.txt
Experiment success

可以帮助我在 jason.txt

中获得所需的输出

提前致谢。

您必须使用方括号来应用命令替换。

puts [MY_FUNCTION]

当你puts没有指定频道时,你会putsstdout。如果你想把一个字符串放到一个文件中,你通常会这样做:

puts $fp_jason "Experiment success"

因此,如果您用函数替换 Experiment success,该函数必须 return 字符串 Experiment success,因此自动变为:

set fp_jason [open jason.txt w]

proc MY_FUNCTION { } {
    return "Experiment success"
}
puts $fp_jason "[MY_FUNCTION]"

我删除了函数前后的空格,因为看起来您不需要它们。此外,如果除了函数的结果(或任何可能被解释器解释为附加参数的任何内容)之外,您没有向文件中添加任何内容,您可以安全地使用:

puts $fp_jason [MY_FUNCTION]

如果您这样做,请使用引号,因为您在字符串中使用了空格:

proc MY_FUNCTION { } {
    return "4"
}
puts $fp_jason "A table has [MY_FUNCTION] legs"

这是错误的,因为每个单词都会被解释为命令的参数 puts:

proc MY_FUNCTION { } {
    return "4"
}
puts $fp_jason A table has [MY_FUNCTION] legs