0

hostname次のコマンドを使用して、メイン文字列内の特定の文字列()を変数値に置き換えようとしています。

set newVar [string map {`hostname` $theHost} 'lsnrctl status listener_`hostname`']

ただし、hostname変数値で置き換える代わりに、変数識別子、つまり「$theHost」を使用して置き換えます。

newVarは次のようになります。

lsnrctl status listener_$theHost

これにしたい、

lsnrctl status listener_theHostName

ここで、「theHostName」は変数「$theHost」の値です。

どうすればこれを達成できますか?

4

2 に答える 2

4

list次のコマンドを使用して置換リストを作成します。

set newVar [string map [list `hostname` $theHost] "lsnrctl status listener_`hostname`"

またはあなたはただ使うことができます

set newVar "lsnrctl status listener_${theHost}"

'Tclでは特別な意味がないため、スニペットはエラーをスローします。"コマンド、変数、およびバックスラッシュの置換が必要な場合は、これを使用{します。(\行の終わりがまだ置換される前に)。

したがって、使用{`hostname` $theHost}は、必要なものではなく、に置き換えられ`hostname` $theHostます。したがって、を使用してリストを作成する方が適切listです"`hostname` $theHost"。$ theHostが有効なリスト要素(スペースなどを含まない)の場合は機能する可能性がありますが、の値が$theHostisの場合は失敗しますfoo barstring mapエラーがスローされます)

于 2013-02-25T11:34:24.733 に答える
1

あなたはただすることはできません

set newVar 'lsnrctl status listener_'
append newVar $theHost
于 2013-02-25T09:32:31.233 に答える