TCL - 检查文件是否包含变量值并返回部分行

时间:2018-06-02 19:55:16

标签: tcl

我想问一下“为什么?”和文件阅读的奇怪问题的一些帮助。

我的文件包含以下值:

var1=home
var2=dog

在我的代码中,我试图找到变量的名称,获取它所在的行,修剪它并获得值(例如,home)

我用它来获取它:

puts [regexp { $var_name*\s*=\s*\s*(\S+)\s*} $line all ip_ftpAI]

我之前做过小检查:

if {[string match $var_name "var1"]} { puts " value ok:$var_name"

总是如此

当我将$var_name更改为普通字符串"home"时,它可以正常工作,但解决方案仅适用于一种可能性。

有人可以给我一些建议如何处理这个问题吗?

1 个答案:

答案 0 :(得分:2)

变量未被扩展,因为它在大括号内。请参阅https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm规则#6

这样做构建正则表达式:

set var_name "var1"
append regex $var_name {\s*=\s*(\S+)}
if {[regexp -- $regex $line all value]} {
    puts "$var_name value is $value"
}

您可以使用Tcl等同于sprintf:

,而不是追加
set regex [format {%s\s*=\s*(\S+)} $var_name]