TCL 带花括号的字符串操作
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]
现在 returns 一组额外的 {} 像这样
-Xjit:disableOSR -Xgc:preferredHeapBase=0x100000000 -Xmnx1152m -Xmns512m
-Xgcpolicy:gencon -agentlib:getClasses -noverify {${variable_name}}
我找到了多篇关于如何删除多余的 {} 的文章 here and here,但我似乎无法将结果设置为我用来设置新 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 列表的上下文,而可能是一个简单的 space 分隔字符串。最简单的方法是在您不再考虑使用 Tcl 单词列表并开始考虑使用通用字符串时使用 join
,可能像这样:
lappend attr [list genericJvmArguments [join $jvm_args]]
如果你在字符串中嵌入了 spaces,或者其他一些情况,但不知道在源中使一个词成为一个词的确切标准,它将无法很好地应对material 或者如何在系统中引用它们,这是你可能得到的最好的。 (做这么多,至少便宜了。。。)
我正在修改 JACL 中的应用程序撤销脚本。此脚本旨在搜索我们要在服务器的 JVM 参数中删除的 JVM 参数字符串。此发布周期的应用程序的新功能是 jvm 参数 ${variable_name}。我的旧代码
set ixReplace [lsearch -exact $jvm_args "string_to_search"]
set jvm_args [lreplace $jvm_args $ixReplace $ixReplace]
现在 returns 一组额外的 {} 像这样
-Xjit:disableOSR -Xgc:preferredHeapBase=0x100000000 -Xmnx1152m -Xmns512m -Xgcpolicy:gencon -agentlib:getClasses -noverify {${variable_name}}
我找到了多篇关于如何删除多余的 {} 的文章 here and here,但我似乎无法将结果设置为我用来设置新 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 列表的上下文,而可能是一个简单的 space 分隔字符串。最简单的方法是在您不再考虑使用 Tcl 单词列表并开始考虑使用通用字符串时使用 join
,可能像这样:
lappend attr [list genericJvmArguments [join $jvm_args]]
如果你在字符串中嵌入了 spaces,或者其他一些情况,但不知道在源中使一个词成为一个词的确切标准,它将无法很好地应对material 或者如何在系统中引用它们,这是你可能得到的最好的。 (做这么多,至少便宜了。。。)