[英]TCL String Manipulation with curly braces
我正在JACL中修改应用程序退出脚本。 该脚本旨在在服务器的JVM参数中搜索要删除的JVM参数字符串。 这个发行周期对应用程序来说是新的,它是jvm参数$ {variable_name}。 我的旧代码
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}}
我找到了多篇有关如何在此处和此处删除多余的{}的文章,但我似乎无法将结果设置为我用来设置新jvm参数的变量。
我的最终目标是将正确的字符串设置为名为jvm_args的变量,以便我可以用来更新JVM参数。
set attr {}
lappend attr [list genericJvmArguments $jvm_args]
$AdminConfig modify $server_jvm_id $attr
任何帮助或建议,将不胜感激。
Tcl之所以添加这些花括号,是因为在lreplace
操作之后您有一个格式正确的 Tcl列表,而不是任何旧字符串。 大括号阻止了${variable_name}
被解释为变量替换。 $
是Tcl元语法字符。 (方括号也将引号,其他一些字符也会引号。)
但是,您希望将结果提供给不需要Tcl列表的上下文,而可能只是简单的用空格分隔的字符串。 最简单的方法是在您不再考虑拥有Tcl单词列表并开始考虑拥有通用字符串的时候使用join
,大概是这样的:
lappend attr [list genericJvmArguments [join $jvm_args]]
如果您在字符串中嵌入了空格或其他一些情况,但是如果不知道在源材料中使单词成为单词的确切标准或如何在系统中引用内容的确切标准,这将无法很好地应对。接受它们,这是您可能获得的最好的结果。 (做这件事至少很便宜……)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.