我想问一下“为什么?”和文件阅读的奇怪问题的一些帮助。
我的文件包含以下值:
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"
时,它可以正常工作,但解决方案仅适用于一种可能性。
有人可以给我一些建议如何处理这个问题吗?
答案 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]