TCL中string map函数使用变量失效问题求助
问题解决:TCL中string map使用变量替换失效
你的问题出在string map的第一个参数解析方式上:当用大括号{}包裹替换对时,TCL不会解析其中的变量,会把$version_current和$version_target当作字面量字符串处理,自然匹配不到目标内容。
两种可行解决方案
方案1:用双引号包裹替换列表
将替换列表的大括号改为双引号,让TCL自动展开变量:
set arg_current_version "1.03a" set arg_target_version "2.1" set data " version=\"1.03a\" ddgsdgfs" set version_current "version=\"$arg_current_version\"" set version_target "version=\"$arg_target_version\"" set data [string map "$version_current $version_target" $data]
方案2:用list命令构造替换列表(更安全)
如果变量内容包含特殊字符,用list命令构造替换列表能避免转义问题,是更稳妥的写法:
set arg_current_version "1.03a" set arg_target_version "2.1" set data " version=\"1.03a\" ddgsdgfs" set version_current "version=\"$arg_current_version\"" set version_target "version=\"$arg_target_version\"" set data [string map [list $version_current $version_target] $data]
两种方法都能让string map正确识别变量中的替换内容,执行后$data会被替换为 version="2.1" ddgsdgfs。
内容的提问来源于stack exchange,提问作者L. Quastana
相关产品推荐
相关产品推荐

