2016-12-08 39 views
0

我正在修改JACL中的应用程序回退脚本。此脚本旨在搜索要在服务器的JVM参数内移除的JVM参数字符串。这个发布周期的新应用是一个jvm参数$ {variable_name}。我的老代码带花括号的TCL字符串操作

set ixReplace [lsearch -exact $jvm_args "string_to_search"] 
set jvm_args [lreplace $jvm_args $ixReplace $ixReplace] 

现在返回一个额外的集合{}这样

 
-Xjit:disableOSR -Xgc:preferredHeapBase=0x100000000 -Xmnx1152m -Xmns512m 
-Xgcpolicy:gencon -agentlib:getClasses -noverify {${variable_name}} 

我发现如何删除多余的{}多篇文章herehere,但我似乎无法设置结果到我用来设置新的jvm参数的变量。

我的最终目标是将正确的字符串设置为一个名为jvm_args的变量,以便我可以用来更新像这样的JVM参数。

set attr {} 
lappend attr [list genericJvmArguments $jvm_args] 
$AdminConfig modify $server_jvm_id $attr 

任何帮助或建议将不胜感激。

回答

1

Tcl的添加这些大括号,因为你有一个格式良好的 Tcl列表后lreplace操作,而不是任何旧的字符串。大括号使${variable_name}不再被解释为变量替换; $是一个Tcl metasyntax字符。 (方括号也会引起引号,就像其他几个字符一样)

但是,您希望将结果馈送到不期望Tcl列表的上下文中,而是可能需要一个简单的空间 - 分隔字符串。最简单的方法是只使用join点在哪里,你停下来有字的Tcl列表的想法,并开始具有普通字符串的思维,大概是这个样子:

lappend attr [list genericJvmArguments [join $jvm_args]] 

它不会,如果你很好地应对已经在字符串或其他一些情况下嵌入了空格,但是不知道在源材料中是什么使单词变成单词的确切标准,或者如何在系统中引用事物,这是最好的'很可能会得到。 (这么做至少很便宜......)