簡體   English   中英

帶花括號的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]

現在返回這樣的一組額外的{}

-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM