0

我正在修改 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

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

4

1 回答 1

1

Tcl 添加这些大括号是因为您在操作后得到了一个格式良好的Tcl 列表lreplace,而不是任何旧字符串。大括号阻止${variable_name}被解释为变量替换;这$是一个 Tcl 元语法字符。(方括号也会吸引引用,其他一些字符也会如此。)

但是,您希望将结果提供给不需要 Tcl 列表的上下文,而可能是一个简单的空格分隔字符串。最简单的方法是join在您停止考虑拥有一个 Tcl 单词列表并开始考虑拥有一个通用字符串的地方使用,可能像这样:

lappend attr [list genericJvmArguments [join $jvm_args]]

如果您在字符串中嵌入了空格或其他一些情况,但不知道在源材料中使单词成为单词的确切标准或如何在系统中引用事物的确切标准,它将无法很好地处理服用它们,这是你可能得到的最好的。(做这么多至少便宜……)

于 2016-12-08T23:01:38.287 回答