【问题标题】:TCL String Manipulation with curly braces带花括号的 TCL 字符串操作
【发布时间】:2016-12-08 22:47:56
【问题描述】:

我正在 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}}

我找到了多篇关于如何删除额外 {} herehere 的文章,但我似乎无法将结果设置为我用来设置新 jvm 参数的变量。

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

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

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

【问题讨论】:

    标签: java jvm tcl jacl


    【解决方案1】:

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

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

    lappend attr [list genericJvmArguments [join $jvm_args]]
    

    如果您在字符串中嵌入了空格或其他一些情况,但不知道在源材料中使单词成为单词的确切标准或如何在正在接受他们的系统,这是你可能得到的最好的。 (做这么多至少便宜……)

    【讨论】:

      猜你喜欢
      • 2023-01-29
      • 2013-10-01
      • 2011-07-17
      • 2016-07-25
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多