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 {${変数名}}

ここここで余分な {} を削除する方法に関する複数の記事を見つけましたが、新しい 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 に答える